/// vn.spoj.com/problems/ORDERSET/
/// trie bit by muoii
#include <bits/stdc++.h>
using namespace std;
#define tag "spoj"
#define maxn 0
#define maxc 0
#define len 31
#define oo 1000000007
#define mid ((l+r)>>1)
#define meset(a,x) memset(a,x,sizeof(a))
#define loop(x) for(int LoOpEr=x;LoOpEr-->0;)
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
struct trie{
int con,fin;
trie *next[2];
int rev(int x)
{
int rv=0;
for(int i=0;i<len;i++)
{
rv<<=1;
rv|=x&1;
x>>=1;
}
return rv;
}
void add(int x)
{
if(check(x)) return; /// with a val, only 0/1 in set
this->con++;
trie *ptr=this;
x=rev(x);bool bit;
for(int i=0;i<len;i++)
{
bit=x&1;
x>>=1;
if(!(ptr->next[bit])) ptr->next[bit]=new trie();
ptr=ptr->next[bit];
ptr->con++;
}
ptr->fin++;
}
int check(int x)
{
trie *ptr=this;
x=rev(x);bool bit;
for(int i=0;i<len;i++)
{
bit=x&1;
x>>=1;
if(!(ptr->next[bit])) return 0;
ptr=ptr->next[bit];
}
return ptr->fin;
}
void delling(trie *ptr,const int &i,const int &x)
{
if(i==len)
{
ptr->fin--;
return;
}
trie* nxt=ptr->next[x&1];
nxt->con--;
delling(nxt,i+1,x>>1);
if(nxt->con==0)
{
delete(nxt);
ptr->next[x&1]=0;
}
}
void del(const int &x)
{
if(!check(x)) return;
this->con--;
delling(this,0,rev(x));
}
int kth(int k)
{
if(k>this->con)
{
cout<<"invalid\n";
return 0;
}
int rep=0;
trie *ptr=this;
int cl,cr;
bool bit;
#define child(x) ptr->next[(x)]
for(int i=0;i<len;i++)
{
cl=(child(0))?child(0)->con:0;
cr=(child(1))?child(1)->con:0;
bit=(cl<k);
k-=bit?cl:0;
rep=(rep<<1)|bit;
ptr=ptr->next[bit];
}
return rep;
}
int smallers(int x)
{
int rep=0;
trie *ptr=this;
x=rev(x);bool bit;
for(int i=0;i<len;i++)
{
bit=x&1;
x>>=1;
rep+=(bit && ptr->next[0])?ptr->next[0]->con:0;
if(!ptr->next[bit]) return rep;
ptr=ptr->next[bit];
}
return rep;
}
} *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;
cin>>q;
int x;char type;
for(int i=0;i<q;i++)
{
cin>>type>>x;
if(type=='I') root->add(x+oo);
else if(type=='D') root->del(x+oo);
else if(type=='K' && root->kth(x)) cout<<root->kth(x)-oo<<"\n";
else if(type=='C') cout<<root->smallers(x+oo)<<"\n";
}
return 0;
}
Ly8vIHZuLnNwb2ouY29tL3Byb2JsZW1zL09SREVSU0VULwoKLy8vIHRyaWUgYml0IGJ5IG11b2lpCgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSB0YWcgInNwb2oiCiNkZWZpbmUgbWF4biAwCiNkZWZpbmUgbWF4YyAwCiNkZWZpbmUgbGVuIDMxCiNkZWZpbmUgb28gMTAwMDAwMDAwNwojZGVmaW5lIG1pZCAoKGwrcik+PjEpCiNkZWZpbmUgbWVzZXQoYSx4KSBtZW1zZXQoYSx4LHNpemVvZihhKSkKI2RlZmluZSBsb29wKHgpIGZvcihpbnQgTG9PcEVyPXg7TG9PcEVyLS0+MDspCi8vLz4+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+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+Pj4Kc3RydWN0IHRyaWV7CiAgICBpbnQgY29uLGZpbjsKICAgIHRyaWUgKm5leHRbMl07CiAKICAgIGludCByZXYoaW50IHgpCiAgICB7CiAgICAgICAgaW50IHJ2PTA7CiAgICAgICAgZm9yKGludCBpPTA7aTxsZW47aSsrKQogICAgICAgIHsKICAgICAgICAgICAgcnY8PD0xOwogICAgICAgICAgICBydnw9eCYxOwogICAgICAgICAgICB4Pj49MTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJ2OwogICAgfQogCiAgICB2b2lkIGFkZChpbnQgeCkKICAgIHsKICAgICAgICBpZihjaGVjayh4KSkgcmV0dXJuOyAvLy8gd2l0aCBhIHZhbCwgb25seSAwLzEgaW4gc2V0CiAgICAgICAgdGhpcy0+Y29uKys7CiAgICAgICAgdHJpZSAqcHRyPXRoaXM7CiAKICAgICAgICB4PXJldih4KTtib29sIGJpdDsKICAgICAgICBmb3IoaW50IGk9MDtpPGxlbjtpKyspCiAgICAgICAgewogICAgICAgICAgICBiaXQ9eCYxOwogICAgICAgICAgICB4Pj49MTsKIAogICAgICAgICAgICBpZighKHB0ci0+bmV4dFtiaXRdKSkgcHRyLT5uZXh0W2JpdF09bmV3IHRyaWUoKTsKIAogICAgICAgICAgICBwdHI9cHRyLT5uZXh0W2JpdF07CiAgICAgICAgICAgIHB0ci0+Y29uKys7CiAgICAgICAgfQogICAgICAgIHB0ci0+ZmluKys7CiAgICB9CiAKICAgIGludCBjaGVjayhpbnQgeCkKICAgIHsKICAgICAgICB0cmllICpwdHI9dGhpczsKIAogICAgICAgIHg9cmV2KHgpO2Jvb2wgYml0OwogICAgICAgIGZvcihpbnQgaT0wO2k8bGVuO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGJpdD14JjE7CiAgICAgICAgICAgIHg+Pj0xOwogCiAgICAgICAgICAgIGlmKCEocHRyLT5uZXh0W2JpdF0pKSByZXR1cm4gMDsKIAogICAgICAgICAgICBwdHI9cHRyLT5uZXh0W2JpdF07CiAgICAgICAgfQogICAgICAgIHJldHVybiBwdHItPmZpbjsKICAgIH0KIAogICAgdm9pZCBkZWxsaW5nKHRyaWUgKnB0cixjb25zdCBpbnQgJmksY29uc3QgaW50ICZ4KQogICAgewogICAgICAgIGlmKGk9PWxlbikKICAgICAgICB7CiAgICAgICAgICAgIHB0ci0+ZmluLS07CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAKICAgICAgICB0cmllKiBueHQ9cHRyLT5uZXh0W3gmMV07CiAgICAgICAgbnh0LT5jb24tLTsKIAogICAgICAgIGRlbGxpbmcobnh0LGkrMSx4Pj4xKTsKIAogICAgICAgIGlmKG54dC0+Y29uPT0wKQogICAgICAgIHsKICAgICAgICAgICAgZGVsZXRlKG54dCk7CiAgICAgICAgICAgIHB0ci0+bmV4dFt4JjFdPTA7CiAgICAgICAgfQogCiAgICB9CiAKICAgIHZvaWQgZGVsKGNvbnN0IGludCAmeCkKICAgIHsKICAgICAgICBpZighY2hlY2soeCkpIHJldHVybjsKICAgICAgICB0aGlzLT5jb24tLTsKICAgICAgICBkZWxsaW5nKHRoaXMsMCxyZXYoeCkpOwogICAgfQogCiAgICBpbnQga3RoKGludCBrKQogICAgewogICAgICAgIGlmKGs+dGhpcy0+Y29uKQogICAgICAgIHsKICAgICAgICAgICAgY291dDw8ImludmFsaWRcbiI7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBpbnQgcmVwPTA7CiAKICAgICAgICB0cmllICpwdHI9dGhpczsKICAgICAgICBpbnQgY2wsY3I7CiAKICAgICAgICBib29sIGJpdDsKICAgICAgICAjZGVmaW5lIGNoaWxkKHgpIHB0ci0+bmV4dFsoeCldCiAgICAgICAgZm9yKGludCBpPTA7aTxsZW47aSsrKQogICAgICAgIHsKIAogICAgICAgICAgICBjbD0oY2hpbGQoMCkpP2NoaWxkKDApLT5jb246MDsKICAgICAgICAgICAgY3I9KGNoaWxkKDEpKT9jaGlsZCgxKS0+Y29uOjA7CiAKICAgICAgICAgICAgYml0PShjbDxrKTsKIAogICAgICAgICAgICBrLT1iaXQ/Y2w6MDsKIAogICAgICAgICAgICByZXA9KHJlcDw8MSl8Yml0OwogCiAgICAgICAgICAgIHB0cj1wdHItPm5leHRbYml0XTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlcDsKICAgIH0KIAogICAgaW50IHNtYWxsZXJzKGludCB4KQogICAgewogICAgICAgIGludCByZXA9MDsKIAogICAgICAgIHRyaWUgKnB0cj10aGlzOwogCiAgICAgICAgeD1yZXYoeCk7Ym9vbCBiaXQ7CiAgICAgICAgZm9yKGludCBpPTA7aTxsZW47aSsrKQogICAgICAgIHsKICAgICAgICAgICAgYml0PXgmMTsKICAgICAgICAgICAgeD4+PTE7CiAKICAgICAgICAgICAgcmVwKz0oYml0ICYmIHB0ci0+bmV4dFswXSk/cHRyLT5uZXh0WzBdLT5jb246MDsKIAogICAgICAgICAgICBpZighcHRyLT5uZXh0W2JpdF0pIHJldHVybiByZXA7CiAKICAgICAgICAgICAgcHRyPXB0ci0+bmV4dFtiaXRdOwogICAgICAgIH0KIAogICAgICAgIHJldHVybiByZXA7CiAgICB9CiAKfSAqcm9vdCA9IG5ldyB0cmllKCk7CiAKaW50IG1haW4oKQp7CiAgICAjaWZkZWYgZG1kZAogICAgZnJlb3Blbih0YWciLmlucCIsInIiLHN0ZGluKTsgZnJlb3Blbih0YWciLm91dCIsInciLHN0ZG91dCk7CiAgICAjZW5kaWYgLy8gZG1kZAogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTtjaW4udGllKDApO2NvdXQudGllKDApOwogCiAgICBpbnQgcTsKICAgIGNpbj4+cTsKIAogICAgaW50IHg7Y2hhciB0eXBlOwogICAgZm9yKGludCBpPTA7aTxxO2krKykKICAgIHsKICAgICAgICBjaW4+PnR5cGU+Png7CiAgICAgICAgaWYodHlwZT09J0knKSByb290LT5hZGQoeCtvbyk7CiAgICAgICAgZWxzZSBpZih0eXBlPT0nRCcpIHJvb3QtPmRlbCh4K29vKTsKICAgICAgICBlbHNlIGlmKHR5cGU9PSdLJyAmJiByb290LT5rdGgoeCkpIGNvdXQ8PHJvb3QtPmt0aCh4KS1vbzw8IlxuIjsKICAgICAgICBlbHNlIGlmKHR5cGU9PSdDJykgY291dDw8cm9vdC0+c21hbGxlcnMoeCtvbyk8PCJcbiI7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==