#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; }