/// trie str by muoii
#include <bits/stdc++.h>
using namespace std;
#define tag "spoj"
#define maxn 0
#define module 0
#define oo 1000000007LL
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
struct trie{
int visit,finish;
trie *next[26];
void add(const string &s)
{
trie *ptr=this;
for(int i=0,c;i<s.size();i++)
{
c=s[i]-'a';
if(!(ptr->next[c])) ptr->next[c]=new trie();
ptr=ptr->next[c];
ptr->visit++;
}
ptr->finish++;
}
int check(const string &s)
{
trie *ptr=this;
for(int i=0,c;i<s.size();i++)
{
c=s[i]-'a';
if(!(ptr->next[c])) return 0;
ptr=ptr->next[c];
}
return ptr->finish;
}
void delling(trie *ptr,const int &i,const string &s)
{
if(i==s.size())
{
ptr->finish--;
return;
}
trie* nxt=ptr->next[s[i]-'a'];
delling(nxt,i+1,s);
nxt->visit--;
if(nxt->visit==0)
{
delete(nxt);
ptr->next[s[i]-'a']=0;
}
}
void del(const string &s)
{
if(!check(s)) return;
delling(this,0,s);
}
} *root = new trie();
int main()
{
#ifdef dmdd
freopen(tag".inp","r",stdin); freopen(tag".out","w",stdout);
#endif // dmdd
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int q;
string str;
int type;
cin>>q;
for(int i=0;i<q;i++)
{
cin>>type>>str;
if(type==0) root->del(str);
else if(type==1) root->add(str);
else cout<<root->check(str)<<"\n";
}
return 0;
}
Ly8vIHRyaWUgc3RyIGJ5IG11b2lpCgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSB0YWcgInNwb2oiCiNkZWZpbmUgbWF4biAwCiNkZWZpbmUgbW9kdWxlIDAKI2RlZmluZSBvbyAxMDAwMDAwMDA3TEwKLy8vPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4Kc3RydWN0IHRyaWV7CiAgICBpbnQgdmlzaXQsZmluaXNoOwogICAgdHJpZSAqbmV4dFsyNl07CgogICAgdm9pZCBhZGQoY29uc3Qgc3RyaW5nICZzKQogICAgewogICAgICAgIHRyaWUgKnB0cj10aGlzOwoKICAgICAgICBmb3IoaW50IGk9MCxjO2k8cy5zaXplKCk7aSsrKQogICAgICAgIHsKICAgICAgICAgICAgYz1zW2ldLSdhJzsKCiAgICAgICAgICAgIGlmKCEocHRyLT5uZXh0W2NdKSkgcHRyLT5uZXh0W2NdPW5ldyB0cmllKCk7CgogICAgICAgICAgICBwdHI9cHRyLT5uZXh0W2NdOwogICAgICAgICAgICBwdHItPnZpc2l0Kys7CiAgICAgICAgfQogICAgICAgIHB0ci0+ZmluaXNoKys7CiAgICB9CgogICAgaW50IGNoZWNrKGNvbnN0IHN0cmluZyAmcykKICAgIHsKICAgICAgICB0cmllICpwdHI9dGhpczsKCiAgICAgICAgZm9yKGludCBpPTAsYztpPHMuc2l6ZSgpO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGM9c1tpXS0nYSc7CgogICAgICAgICAgICBpZighKHB0ci0+bmV4dFtjXSkpIHJldHVybiAwOwoKICAgICAgICAgICAgcHRyPXB0ci0+bmV4dFtjXTsKCiAgICAgICAgfQogICAgICAgIHJldHVybiBwdHItPmZpbmlzaDsKICAgIH0KCiAgICB2b2lkIGRlbGxpbmcodHJpZSAqcHRyLGNvbnN0IGludCAmaSxjb25zdCBzdHJpbmcgJnMpCiAgICB7CiAgICAgICAgaWYoaT09cy5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgICBwdHItPmZpbmlzaC0tOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKCQl0cmllKiBueHQ9cHRyLT5uZXh0W3NbaV0tJ2EnXTsKCiAgICAgICAgZGVsbGluZyhueHQsaSsxLHMpOwoKICAgICAgICBueHQtPnZpc2l0LS07CiAgICAgICAgaWYobnh0LT52aXNpdD09MCkKCQl7CgkJCWRlbGV0ZShueHQpOwoJCQlwdHItPm5leHRbc1tpXS0nYSddPTA7CgkJfQogICAgfQogICAgdm9pZCBkZWwoY29uc3Qgc3RyaW5nICZzKQogICAgewogICAgICAgIGlmKCFjaGVjayhzKSkgcmV0dXJuOwogICAgICAgIGRlbGxpbmcodGhpcywwLHMpOwogICAgfQogICAgCn0gKnJvb3QgPSBuZXcgdHJpZSgpOwppbnQgbWFpbigpCnsKICAgICNpZmRlZiBkbWRkCiAgICBmcmVvcGVuKHRhZyIuaW5wIiwiciIsc3RkaW4pOyBmcmVvcGVuKHRhZyIub3V0IiwidyIsc3Rkb3V0KTsKICAgICNlbmRpZiAvLyBkbWRkCiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CiAgICBpbnQgcTsKICAgIHN0cmluZyBzdHI7CiAgICBpbnQgdHlwZTsKICAgIGNpbj4+cTsKICAgIGZvcihpbnQgaT0wO2k8cTtpKyspCiAgICB7CiAgICAgICAgY2luPj50eXBlPj5zdHI7CgogICAgICAgIGlmKHR5cGU9PTApIHJvb3QtPmRlbChzdHIpOwogICAgICAgIGVsc2UgaWYodHlwZT09MSkgcm9vdC0+YWRkKHN0cik7CiAgICAgICAgZWxzZSBjb3V0PDxyb290LT5jaGVjayhzdHIpPDwiXG4iOwogICAgfQogICAgcmV0dXJuIDA7Cn0K