#include<iostream>
using namespace std;
const int N=64e5+10;
using LL=long long;
struct NODE{
int ch[2];
int cnt;
int siz;
}trie[N];
int n;
string to2(LL val){
string ans;
do{
int r=val&1;
val>>=1;
ans=(char)(r+'0')+ans;
}while(val);
return ans;
}
void insert(string s){
int u=0;
for(int i=0;i<s.size();i++){
int c=s[i]-'0';
if(trie[u].ch[c]==0) trie[u].ch[c]=++n;
u=trie[u].ch[c];
trie[u].siz++;
}
trie[u].cnt++;
}
int query(string s){
int u=0,ans=0;
for(int i=0;i<s.size();i++){
int c=s[i]-'0';
int l=trie[u].ch[0],lsiz=0;
if(l!=0) lsiz=trie[l].siz;
ans+=trie[u].cnt;
if(c==1) ans+=lsiz;
if(trie[u].ch[c]==0) break;
u=trie[u].ch[c];
}
return ans;
}
int main(){
int q,op;
LL x;
cin>>q;
while(q--){
cin>>op>>x;
if(op==1) insert(to2(x));
else cout<<query(to2(x))<<endl;
}
return 0;
}