#include <bits/stdc++.h>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct trie{
int cntfin, nr;
trie *F[26];
trie(){
cntfin = 0; nr = 0;
for (int i = 0; i < 26; i++)
F[i] = NULL;
}
};
int task;
char w[25];
trie* root;
int main()
{
root = new trie;
while (f >> task >> w){
trie *aux = root;
char *p = w;
if (task == 0){
while (*p){
int i = *p - 'a';
if (aux->F[i] == NULL) aux->F[i] = new trie;
aux = aux->F[i];
p++; aux->nr++;
}
aux->cntfin++;
}
else if (task == 1){
while (*p){
int i = *p - 'a';
aux = aux->F[i];
p++; aux->nr--;
}
aux->cntfin--;
}
else if (task == 2){
while (*p){
int i = *p - 'a';
if (aux->F[i] == NULL)
break;
if (aux->F[i]->nr == 0)
break;
aux = aux->F[i]; p++;
}
if (*p == 0) g << aux->cntfin << '\n';
else g << "0\n";
}
else {
int lg = 0;
while (*p){
int i = *p - 'a';
if (aux->F[i] == NULL)
break;
if (aux->F[i]->nr == 0)
break;
lg++; p++; aux = aux->F[i];
}
g << lg << '\n';
}
}
return 0;
}