#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
class Trie
{
public:
int num;
Trie* pNext[26];
Trie()
{
num = 0;
memset(pNext, NULL, sizeof(pNext));
}
};
Trie* proot;//根节点;
void InsertTrie(char* str)
{
int j;
Trie* p = proot;//根节点不保留什么信息
for(; *str; str++)
{
j = *str - 'a';
if(p->pNext[j])
{
p->pNext[j]->num++;//表明从根节点到此字符,并以此字符串为前缀的个数
}
else
{
p->pNext[j] = new Trie;
p->pNext[j]->num = 1;
}
p = p->pNext[j];
}
}
int FindTrie(char* str)
{
int j;
Trie* p = proot;
for(; *str; str++)
{
j = *str - 'a';
if(p->pNext[j])
p = p->pNext[j];
else
return 0;
}
return p->num;
}
void DeleteTrie(Trie* proot)//记得要有删除操作,要不然他们会一直占着空间不释放的
{
Trie* p = proot;
for(int i = 0; i < 26; ++i)
if(p->pNext[i])
DeleteTrie(p->pNext[i]);
delete(proot);
}
int main()
{
char str[15];
proot = new Trie;
while(gets(str))
{
if(strlen(str) > 0)
InsertTrie(str);
else break;
}
while(gets(str))
printf("%d\n",FindTrie(str));
DeleteTrie(proot);
return 0;
}