按题意模拟
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<sstream>
using namespace std;
const int maxn = 1e7+500;
char poul[1025][25], ans[25];
int tot,cnt,trie[maxn][30],sum[maxn];
inline void insert(char* str){
int len = strlen(str), rt = 0;
for(int i=0;i<len;i++){
int nx = str[i]-'a';
if(trie[rt][nx]==0) trie[rt][nx]=++cnt;
rt = trie[rt][nx];
sum[rt]++;
}
}
inline void find(char* str){
int len = strlen(str), rt = 0,sz=0;
for(int i=0;i<len;i++){
if(sum[rt]==1) {
ans[sz]='\0';
return ;
}
int nx = str[i]-'a';
rt = trie[rt][nx];
ans[sz++] = str[i];
}
ans[sz]='\0';
}
int main(){
while(scanf("%s",poul[++tot])!=EOF)
insert(poul[tot]);
for(int i=1;i<=tot;i++){
find(poul[i]);
printf("%s %s\n",poul[i],ans);
}
return 0;
}