##Tire树
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
char str[N];
int a[N][26] ,cnt[N] ,idx;//cnt[N]是一个字符串结尾标记有几个字符串,idx是标记下一个字符应该去哪儿找。a[N][26]用于储存字符串树
void insert1(char str[])
{
int p = 0;
for (int i = 0 ; str[i] ; i ++)
{
int x = str[i] - 'a';
if (!a[p][x]) a[p][x] = ++ idx;
p = a[p][x];
}
cnt[p] ++;
}
int query(char str[])
{
int p = 0 ;
for (int i = 0 ; str[i] ; i ++)
{
int x = str[i] - 'a';
if (!a[p][x]) return 0;
p = a[p][x];
}
return cnt[p];
}
int main()
{
int n;
cin>>n;
while (n --)
{
string op;
cin>>op;
if (op == "I")
{
scanf("%s",str);
insert1(str);
}
else
{
scanf("%s",str);
cout<<query(str)<<endl;
}
}
return 0;
}