#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N][26]; //因为这题是小写的26个字母,所以我们二维写的便是26;
int idx; //idx用来统计新出现的节点的个数。
int cnt[N]; //统计字符串的次数
char str[N]; //输入的字符串
void insert(char *str)
{
int p=0;
for(int i=0; str[i]; i++)
{
int u=str[i]-'a';
if(!a[p][u])//如果当前节点不存在,就相当于这里没有往下的路,那么就相当于我们给他创建一条路。
{
a[p][u]=++idx;
}
p=a[p][u];
}
cnt[p]++; /。这里可以统计当前这个字符串出现的次数
}
int query(char *str)
{
int p=0;
for(int i=0; str[i]; i++)
{
int u=str[i]-'a';
if(!a[p][u])
{
return 0;//如果这个节点的值为0,那么说明他不存在这条路,也就是说不存在这样的字符串。返回0
}
p=a[p][u];
}
return cnt[p];
}
int main()
{
int n;
cin>>n;
while(n--)
{
char b;
cin>>b;
if(b=='Q')
{
cin>>str;
cout<<query(str)<<endl;
}
else
{
cin>>str;
insert(str);
}
}
return 0;
}