https://vjudge.net/problem/UVA-630
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
typedef vector<string> vs;
typedef map<string,vs> msv;
msv msv1;
char c[25];
void solve(char c[]){
string s=c;
sort(s.begin(),s.end());
printf("Anagrams for: %s\n",c);
if(msv1.find(s)==msv1.end()){
printf("No anagrams for: %s\n",c);
}else{
int z=1;
for(vs::iterator it=msv1[s].begin();it!=msv1[s].end();it++)
printf("%3d) %s\n",z++,(*it).c_str());
}
}
int main(){
int n;
scanf("%d",&n);
int k=1;
while(n--){
int m;
if(k==1)k++;
else puts("");
scanf("%d",&m);
getchar();
msv1.clear();
while(m--){
gets(c);
string s=c;
sort(s.begin(),s.end());
msv1[s].push_back(c);
}
while(gets(c)){
if(!strcmp(c,"END"))break;
solve(c);
}
}
}