#include<iostream>
#include<string.h>
using namespace std;
int child[1000000][10],tot,root;
bool flag[1000000],F;
char s[10];
void trie_insert()
{
int p,*now=&root,l=strlen(s);
for(p=0;p<l;p++)
{
now=&child[*now][s[p]-'0'];
if(*now==0)
{
*now=++tot;
memset(child[tot],0,sizeof(child[tot]));
}
else if(flag[*now]==true||(p==l-1))
{
F=false;
return;
}
}
flag[*now]=true;
}
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
tot=root=1;
F=true;
memset(child[1],0,sizeof(child[1]));
memset(flag,false,sizeof(flag));
while(n--)
{
cin>>s;
if(F) trie_insert();
}
if(F) cout<<"YES\n";
else cout<<"NO\n";
}
}
hdu1251
#include<stdio.h>
#include<string.h>
#include<stack>
#include<vector>
#include<iostream>
using namespace std;
int child[410000][26],num[410000],tot=1,l;
char s[12];
void trie_insert()
{
int x,i,now=1;
for(i=0;i<l;i++)
{
x=s[i]-'a';
if(!child[now][x]) child[now][x]=++tot;
now=child[now][x];
num[now]++;
}
}
int trie_find()
{
l=strlen(s);
int x,i,now=1;
for(i=0;i<l;i++)
{
x=s[i]-'a';
if(!child[now][x]) return 0;
else now=child[now][x];
}
return num[now];
}
int main()
{
while(gets(s))
{
l=strlen(s);
if(!l) break;
trie_insert();
}
while(scanf("%s",s)!=EOF) printf("%d\n",trie_find());
}