/* 很水的字典樹題 */ 點擊打開鏈接
#include < iostream >
#include < cstdio >
#include < string >
#include < map >
#include < cstring >
#define N 500000
#define M 26
using namespace std;
int n;
char s[N][100];
struct node
{
int f;
node *next[M];
node()
{
f=0;
for(int i=0 ; i<M ; i++ )
next[i]=NULL ;
}
}*Root;
map <string,int> ma;
map <string,int>::iterator it;
void insert(char s[])
{
int i;
node *r=Root;
int len=strlen(s);
for(i=0;i<len;i++)
{
if(!(r->next[s[i]-'a']))
r->next[s[i]-'a']=new node();
r=r->next[s[i]-'a'];
}
r->f=1;
}
int search(char s[],int len)
{
int i;
node *r=Root;
for(i=0 ; i<len ; i++)
{
if(!(r->next[s[i]-'a'])) return 0;
r=r->next[s[i]-'a'];
}
if(r->f==1) return 1;
else return 0;
}
int main ()
{
//freopen("zds.txt","r",stdin);
n=0;
ma.clear();
int i,j,k,l;
char p[100],q[100];
Root = new node();
while(scanf("%s",s[n++])!=EOF)
{
insert(s[n-1]);
}
for(i=0 ; i<n ; i++)
{
l=strlen(s[i]);
if(l>1)
{
for(j=0;j<l-1;j++)
{
int nt=0,mt=0;
memset(q,'\0',sizeof(q));
memset(p,'\0',sizeof(p));
for(k=0 ; k<=j ; k++) p[nt++]=s[i][k];
for(k=j+1 ; k<l ;k++) q[mt++]=s[i][k];
if(search(p,nt) && search(q,mt))
{
string th="";
for(j=0;j<l;j++) th+=s[i][j];
ma[th]=1;
break;
}
}
}
}
for(it=ma.begin();it!=ma.end();it++)
cout<<it->first<<endl;
return 0;
}