#include<bits/stdc++.h>
#define in cin
#define out cout
#define abs(x) ((x>0)?(x):(-(x)))
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define FOR(i, a, b) for(int i = a; i <= b; ++i)
#define DOWNFOR(i, a, b) for(int i = a; i >= b; --i)
#define FOREACH(i, t) for (typeof(t.begin()) i = t.begin(); i != t.end(); ++i)
using namespace std;
const int Nmax = 100001;
string A,B,v[Nmax];
int N,K,a[1<<10],b[1<<10];
struct cmp{
    inline bool operator () (const string &a,const string &b){
        unsigned j=0;
        while(j<a.size() && j<b.size() && a[j]==b[j]) j++;
        if(j>=a.size()) return 1;
        else if(j>=b.size()) return 0;
        else return a[j]<b[j];
    }
};
int main(){
    #ifndef ONLINE_JUDGE
    ifstream in("test.in");
    ofstream out("test.out");
    #endif
    in>>A>>N;
    for(unsigned j=0;j<A.size();j++) a[A[j]]++;
    for(int i=1;i<=N;i++){
        in>>B;
        for(unsigned j=0;j<B.size();j++) b[B[j]]++;
        int k=1;
        for(int j=0;j<(1<<8);j++){
            if(a[j]<b[j]) k=0;
            b[j]=0;
        }
        if(k) v[++K]=B;
    }
    sort(v+1,v+K+1,cmp());
    for(int i=1;i<=K;i++) out<<v[i]<<'\n';
    return 0;
}