#include #include #include #include #include using namespace std; bool used[70001]; string sentence; string words[70001]; vector sol; int wordFrec[70001][100]; int currentFrec[100]; int n; bool cmpFrec(int x) { for(int i = 0; i <= 99 ;i++) { if(wordFrec[x][i] != currentFrec[i]) return false; if(i == 'Z'-'A') i = 'z'-'A'-1; } return true; } void searchSolution() { for(int i=1;i<=n;i++) if(!used[i] && cmpFrec(i)) { sol.push_back(words[i]); used[i] = true; } } int main() { cin>>sentence; cin>>n; for(int i = 1; i <= n; i++) { cin>>words[i]; for(int j = 0; j < words[i].length(); j++) wordFrec[i][words[i][j] - 'A']++; } for(int i = 0; i < sentence.length(); i ++) { memset(currentFrec,0,sizeof(currentFrec)); for(int j = 0; j + i < sentence.length(); j++) { currentFrec[sentence[i+j] - 'A'] ++; searchSolution(); } } sort(sol.begin(), sol.end()); for(vector::iterator it = sol.begin(); it != sol.end(); it++) cout<<*it<<'\n'; return 0; }