//简单的trie开始理解错误,我以为是要找在输入的单词里面最短的前缀,谁知道是唯一能识别这个单词的前缀。
//最可恨的是开始的时候我的cnt是bool型的一直没有改正过来,一直到最后,才知道什么地方错了,bsbsbs……
#include<iostream>
using namespace std;
struct Trie
{
int cnt;
Trie *p[26];
}*root;
char a[1010][30];
void MakeTree(char *s)
{
Trie *r=root;
Trie *tmp;
int i,j;
for(i=0;i<strlen(s);i++)
{
if(r->p[s[i]-'a']==NULL)
{
tmp=new Trie;
tmp->cnt=0;
for(j=0;j<26;j++)
tmp->p[j]=NULL;
r->p[s[i]-'a']=tmp;
}
r=r->p[s[i]-'a'];
r->cnt++;
}
}
void search(char *s)
{
Trie *r=root;
int i;
for(i=0;i<strlen(s);i++)
{
r=r->p[s[i]-'a'];
printf("%c",s[i]);
if(r->cnt==1)
break;
}
printf("/n");
}
int main()
{
int i,n;
root=new Trie;
for(i=0;i<26;i++)
root->p[i]=NULL;
for(i=0;;i++)
{
if(scanf("%s",a[i])==EOF)
break;
else
MakeTree(a[i]);
}
n=i;
for(i=0;i<n;i++)
{
printf("%s ",a[i]);
search(a[i]);
}
return 0;
}