#include<iostream>
//#include<cstdlib>
#include<map>
using namespace std;
struct node{
int cnt;
bool flag;
map<char,node*> link;
};
map<char,node*>::iterator it;
void insert(node *p,char *s){
//cout<<"正在插入"<<*s<<endl;
if(p->link.find(*s)==p->link.end()){//若未找到,创建新map
//cout<<*s<<" 不在当前map中"<<endl;
p->link[*s]=new node;
p->link[*s]->cnt=1;
p->link[*s]->flag=0;
}
else{//若找到,cnt++
p->link[*s]->cnt++;
//cout<<*s<<" 在当前map中. 已插入并加1"<<endl;
}
if(*(s+1)=='\0'){//若下一字符为结束符
p->link[*s]->flag=1;//1代表结束点
//cout<<*s<<" 是最后一个字符"<<endl;
}
else{//下一字符不是结束符,继续插入
//cout<<*s<<" 不是最后一个字符, 继续插入!"<<endl;
insert(p->link[*s],s+1);
}
}
int search(node *p,char *s){
//cout<<"searching char "<<*s<<" ";
if(p->link.find(*s)==p->link.end()){//若未找到return 0
//cout<<"No record in this layer."<<endl;
return 0;
}
else{//若找到 递归
if(*(s+1)!='\0'){
//cout<<"Yes, and searching next char"<<endl;
return search(p->link[*s],s+1);
}
else return p->link[*s]->cnt;
}
}
int main(){
node* root=new node;
root->link.clear();
char in1[15],in2[15];
while(gets(in1)&&in1[0]!='\0'){
insert(root,in1);
}
while(gets(in1)&&in1[0]!='\0'){
cout<<search(root,in1)<<endl;
}
return 0;
}
10-14
10-14