#include <iostream>
#include
<fstream>
#include
<vector>
#include
<
string
>
#include
<algorithm>
#include
<map>
#include
<stack>
#include
<cmath>
#include
<queue>
#include
<
set
>
#include
<list>
#include
<cctype>
#include
<stdio.h>
#include
<stdlib.h>
#include
<
string
.h>
#define
REP(i,j,k) for(int i = j ; i < k ; ++i)
#define
MAXV (1000)
#define
INF (0x6FFFFFFF)
#define
MAX 26
using
namespace
std;
typedef
struct
Trie
{
Trie
*
next[MAX];
int
v;
//
這里表示該字符前綴出現的次數
};
Trie
*
root;
void
Insert(
char
*
str)
{
Trie
*current =
root;
int
len=
strlen(str);
if
(len==
0
)
return
;
REP(i,
0
,len)
{
//
若節點存在,則直接訪問下一個節點,并此前綴出現次數+1
if
(current->next[str[i]-
'
a
'
]!=
NULL)
{
current
=current->next[str[i]-
'
a
'
];
current
->v++
;
}
//
若節點不存在,則新建節點并初始化
else
{
current
->next[str[i]-
'
a
'
]=(Trie*)malloc(
sizeof
(Trie));
current
=current->next[str[i]-
'
a
'
];
REP(i,
0
,
26
) current->next[i]=
NULL;
current
->v=
1
;
}
}
}
int
Find(
char
*
str)
{
int
len=
strlen(str);
struct
Trie *current=
root;
if
(len==
0
)
return
0
;
REP(i,
0
,len)
{
//
如果關鍵詞本字符存在,則訪問下一個節點
if
(current->next[str[i]-
'
a
'
]!=
NULL)
current
=current->next[str[i]-
'
a
'
];
else
return
0
;
//
不存在直接返回0
}
return
current->v;
//
返回該前綴出現次數
}
void
Init()
{
root
=(Trie *)malloc(
sizeof
(Trie));
REP(i,
0
,
26
) root->next[i]=
NULL;
root
->v=
1
;
}
int
main()
{
Init();
char
str[
11
];
//
freopen("in.txt","r",stdin);
while
(gets(str)&&strcmp(str,
""
)!=
0
)
Insert(str);
char
tmp[
11
];
while
(~scanf(
"
%s
"
,tmp))
printf(
"
%d\n
"
,Find(tmp));
return
0
;
}