#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 27typedef struct node{ int v; struct node *next[MAX];}Trie;Trie *root;void creatTrie(char *str){ int i, id, j; Trie *p = root, *q; int len = strlen(str); for( i=0; i<len; i++) { id = str[i] - ‘a‘; if(p->next[id] == NULL){ q = (Trie *)malloc(sizeof(Trie)); q->v = 0; for( j=0; j<MAX; j++) q->next[j] = NULL; p->next[id] = q; } p = p->next[id]; p->v++; }}void findTrie(char *str){ int i, id; int len = strlen(str); Trie *p = root; for( i=0; i<len; i++) { id = str[i] - ‘a‘; p = p->next[id]; if(p == NULL) return ; if(p->v > 1) printf("%c",str[i]); if(p->v == 1){ printf("%c",str[i]); return ; } }}void delTrie(Trie *T){ int i; if(T == NULL) return ; for( i=0; i<MAX; i++) if(T->next[i] != NULL) delTrie(T->next[i]); free(T);}int main(void){ char str[1003][23]; int n = 0, i; root = (Trie *)malloc(sizeof(Trie)); root->v = 0; for( i=0; i<MAX; i++) root->next[i] = NULL; while(scanf("%s",str[n])!=EOF){ creatTrie(str[n++]); } for( i=0; i<n; i++) { printf("%s ",str[i]); findTrie(str[i]); printf("\n"); } delTrie(root); return 0;}