tire主要用于高效存储和查询字符串
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N=5e5+10;
char c[N];//输入数组
int st[N][26];//trie数
int idx;//储存每个节点的唯一坐标
int ans[N];//存储以x结尾的字符串数量
void insert(string c)
{
int p=0;//父亲节点
for(int i=0;i<c.size();i++)
{ int x=c[i]-'a';
if(!st[p][x]) st[p][x]=++idx;//给每个插入的数一个唯一坐标
p=st[p][x]; //更新父亲节点
}
ans[p]++;//以p为结尾的数量
}
int query(string c)
{
int p=0;
for(int i=0;i<c.size();i++)
{ int x=c[i]-'a';
if(!st[p][x]) //如果结点不存在
return 0;
p=st[p][x];
}
return ans[p];
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n;
cin>>n;
while(n--)
{
char s;
cin>>s;
cin>>c;
if(s=='I')
insert(c);
else
cout<<query(c)<<endl;
}
}