</pre><pre>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
const int maxn=1e6+10;
char str[maxn];
int cnt;
struct Trienode
{
bool flag;
Trienode *next[26];
Trienode()
{
flag=false;
for(int i=0; i<26; i++)
next[i]=NULL;
}
};
Trienode *head;
void buildTrie(char *s)
{
p=new Trienode;
Trienode *p=head;
for(int i=0; s[i]; i++)
{
int index=s[i]-'a';
if(!p->next[index])
p->next[index]=new Trienode;
p=p->next[index];
}
p->flag=true;
return ;
}
void searchTrie(char *s)
{
Trienode *p=head;
for(int i=0; s[i]; i++)
{
int index=s[i]-'a';
if(!p->next[index])
{
return ;
}
cnt++;
p=p->next[index];
}
}
int main()
{head=new Trienode;
while(gets(str))
{
if(str[0]=='\0')
break;
buildTrie(str);
}
while(gets(str))
{cnt=0;
searchTrie(str);
printf("%d\n",cnt);
}
return 0;
}