#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int const maxn=26;
int sum;
string s[60000];
struct node
{
int Count;
node*next[maxn];
node()
{
Count=0;
memset(next,0,sizeof(next));
}
};
node *root=new node();
void Insert(string s)
{
node *q=root;
int len=s.size();
for(int i=0;i<len;i++)
{
int id=s[i]-'a';
if(q->next[id]==NULL)q->next[id]=new node();
q=q->next[id];
}
q->Count=1;
}
int Find(string s)
{
if(s=="") return 0;
node *q=root;
int len=s.size();
for(int i=0;i<len;i++)
{
int id=s[i]-'a';
q=q->next[id];
if(q==0)return 0;
}
if(q->Count)return 1;
return 0;
}
int query(string s)
{
node *q=root;
int len=s.size();
for(int i=0;i<len-1;i++)
{
int id=s[i]-'a';
q=q->next[id];
if(q->Count==1)
{
if(Find(s.substr(i+1)))return 1;
}
}
return 0;
}
int main()
{
int i;
string str;
sum=0;
while(cin>>str)
{
s[sum++]=str;
Insert(str);
}
for(i=0;i<sum;i++)
{
if(query(s[i]))cout<<s[i]<<endl;
}
return 0;
}
杭电1247
最新推荐文章于 2020-12-20 02:14:02 发布