include[HTML_REMOVED]
using namespace std;
const int N=1e6+10;
int son[N][26];
int cnt[N];
int idx=0;//节点
void insert(string s)
{
int p=0; //p实际上是指针 idx是分配节点数
for(int i=0;i<s.size();i)
{
char c=s[i];
if(son[p][c-‘a’]==0)//该节点的下一个节点不存在,将要分配下一个节点
{
son[p][c-‘a’]=idx;
}
//该节点存在下个节点
p=son[p][c-‘a’];//存储值并进入指针移入下一个节点。
}
cnt[p]++;//以该节点结尾的值的个数
}
int query(string s)
{
int p=0;
for(int i=0;i<s.size();i++)
{
char c=s[i];
if(son[p][c-‘a’]==0) return 0;//还未遍历完全就没有了下一个节点直接返回
p=son[p][c-'a'];
}
return cnt[p];
}
int main()
{
int n;
cin>>n;
for(int i=0;i[HTML_REMOVED]>c>>s;
if(c==’I’) insert(s);
if(c=='Q') cout<<query(s)<<endl;
}
}