//字母重排
#include<string>
#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
char word[2000][10],sorted[2000][10];//注意二维数组的定义I!!
//比较自符
int cmp_char(const void*_a,const void*_b)
{
char*a=(char*)_a;
char *b=(char*)_b;
return *a-*b;
}
int cmp_string(const void*_a,const void*_b)
{
char*a=(char*)_a;
char*b=(char*)_b;
return strcmp(a,b);
}
int main()
{
int n=0;
for(;;)
{
cin>>word[n];
if(word[n][0]=='*')break;//完成字典的输入
n++;
}
qsort(word,n,sizeof(word[1]),cmp_string);//给字典中的单词排序
for(int i=0;i<n;i++)
{
strcpy(sorted[i],word[i]);//把排序后的字典单词放到sorted中
qsort(sorted[i],strlen(sorted[i]),sizeof(char),cmp_char);//给每个单词排序
}
//至此完成了字典中德单词,单词中德字母重拍了
//接下再进行输入
char s[6];
while(cin>>s&&s)
{
sort(s,s+strlen(s));//这里我用了sort函数,其实和用qsort差不多,不过比较方便
int found=0;
for(int i=0;i<n;i++)
{
if(strcmp(sorted[i],s)==0)
{
found=1;cout<<word[i];//注意是输出原来的字典单词而不是排序后的sorted的
}
}
if(!found)cout<<(":(");
cout<<endl;
}
return 0;
}