ACCode:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int Trie[400001][26];
int sum[400001];
bool v[400001];
int tot;
void Insert(char *s) //向整棵树上插入 s 这个字符串
{
int len = strlen(s);
int root = 0; //从根节点开始向下寻找
for(int i = 0; i < len; i++){
int id = s[i] - 'a';
if(!Trie[root][id]) Trie[root][id] = ++tot; //没找到前缀,新加一个
sum[Trie[root][id]]++;
root = Trie[root][id];
}
v[root] = true;
}
int PreCal(char *s) //计算前缀出现的次数
{
int root = 0;
int len = strlen(s);
for(int i = 0; i < len; i++){
int x = s[i] - 'a';
if(!Trie[root][x]) return 0; //以root为头结点的x字母不存在,返回0
root = Trie[root][x]; //为查询下一个字母做准备,往下走
}
return sum[root]; //OK找到了
}
bool Find(char *s) //查找是否存在这个单词
{
int root = 0;
int len = strlen(s);
for(int i = 0; i < len; i++){
int x = s[i] - 'a';
if(!Trie[root][x]) return false;
root = Trie[root][x];
}
return v[root];
}
int main()
{
tot = 0;
memset(sum, 0, sizeof(sum));
memset(Trie, 0, sizeof(Trie));
memset(v, 0, sizeof(v));
char str[15];
bool flag = false;
while(gets(str)){
if(str[0] == '\0') {flag = true; continue;}
if(!flag) Insert(str);
else cout << PreCal(str) << endl;
}
return 0;
}