#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int trie[500099][30];
int is[500099];
int rt,i,top=1;
int insert(char a[],int rt)
{
for(i=0; a[i]; i++)
{
int x=a[i]-'a';
if(trie[rt][x]==0)
{
trie[rt][x]=++top;
}
rt=trie[rt][x];
is[rt]++;
}
}
int find(char a[],int rt)
{
int x;
for(i=0; a[i]; i++)
{
x=a[i]-'a';
if(trie[rt][x]==0)
return 0;
rt=trie[rt][x];
}
return is[rt];
}
int main()
{
char a[30];
memset(trie,0,sizeof(trie));
memset(is,0,sizeof(is));
int rt=1;
while(gets(a))
{
// int len=strlen(a);
if(strlen(a)==0)
break;
insert(a,rt);
memset(a,0,sizeof(a)); ///不影响AC,但是不理解为什么不多开数组会RE
} ///难道后台数据比题中所述要大?
while(cin>>a)
{
cout<<find(a,1)<<endl;
}
return 0;
}