#include <fstream>
#include <cstring>
#include <cstdlib>
#define ab(x) (x-'a')
using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
struct trie{
int nr,cuv;
trie *lit[27];
};
trie* t;
void ins(char s[],int i,int n,trie* x)
{
if(x->lit[ ab(s[i]) ]==NULL)
x->lit[ ab(s[i]) ]=new trie;
x=x->lit[ ab(s[i]) ];
x->nr++;
if(i!=n-1)
ins(s,i+1,n,x);
else
x->cuv++;
}
void del(char s[],int i,int n,trie* x)
{
x=x->lit[ ab(s[i]) ];
x->nr--;
if(i!=n-1)
del(s,i+1,n,x);
else
x->cuv--;
}
int cnt(char s[],int i,int n,trie* x)
{
x=x->lit[ ab(s[i]) ];
if(x==NULL || x->nr==0)return 0;
else if(i==n-1)return x->cuv;
else return cnt(s,i+1,n,x);
}
int pref;
void prefix(char s[],int i,int n,trie* x)
{
x=x->lit[ ab(s[i]) ];
if(x==NULL)return;
if(i!=n-1 && x->nr > 0)
{
pref++;
prefix(s,i+1,n,x);
}
}
int main()
{
int q,type;
char s[1001];
t=new trie;
while(in>>type>>s)
{
if(type==0)
ins(s,0,strlen(s),t);
else if(type==1)
del(s,0,strlen(s),t);
else if(type==2)
out<<cnt(s,0,strlen(s),t)<<'\n';
else{
pref=0;
prefix(s,0,strlen(s),t);
out<<pref<<'\n';
}
}
return 0;
}