#include <cstdio>
#include <time.h>
#define REP 50
#define CONST1 773010
#define CONST2 398001
#define T1 110035
#define T2 310453
#define NMAX 1100000
using namespace std;
int d1,d2;
inline int hash1(int x){
return x%d1;
}
inline int hash2(int x){
return x%d2;
}
inline int genereaza(){
d1=CONST1+rand()%T1;
d2=CONST2+rand()%T2;
}
bool adauga(int nr, int *v1, int *v2){
int i,aux;
for(i=1;i<=REP;i++){
if(v1[hash1(nr)]==0)
{
v1[hash1(nr)]=nr;
return 1;
}
if(v2[hash2(nr)]==0)
{
v2[hash2(nr)]=nr;
return 1;
}
else
{
aux=v2[hash2(nr)];
v2[hash2(nr)]=nr;
nr=aux;
}
}
}
bool sterge(int nr, int *v1, int *v2){
int x1=hash1(nr), x2=hash2(nr);
if(v1[x1] == nr)
{
v1[x1] = 0;
return 1;
}
if(v2[h2] == nr)
{
v2[x2] = 0;
return 1;
}
return 0;
}
bool exista(int nr, int *v1, int *v2){
if(v1[hash1(nr)] == nr || v2[hash2(nr)] == nr)
return 1;
return 0;
}
void rehash(int k, bool *op, int *nr, int *v1, int *v2){
delete v1;
delete v2;
genereaza();
v1=new int[d1+4];
v2=new int[d2+4];
int i;
for(i=1; i<=k;i++){
if(op[i])
{
if(!adauga(nr[i],v1,v2))
rehash(k,op,nr,v1,v2);
else
sterge(nr[i],v1,v2);
}
}
}
int main(){
int n,op,x;
freopen("hashuri.in","r",stdin);
freopen("hashuri.out","w",stdout);
scanf("%d",&n);
int *v1=new int[d1+4];
int *v2=new int[d2+4];
bool op[n];
int k=0,nr[n];
while(n--){
scanf("%d%d",&op,&x);
if(op==1)
{
op[++k]=1;
nr[k]=x;
if(!adauga(x,v1,v2))
rehash(k,op,nr,v1,v2);
}
if(op==2)
{
op[++k]=1;
nr[k]=x;
sterge(x,v1,v2);
}
if(op==3)
if(exista(x,v1,v2))
printf("1\n");
else
printf("0\n");
}
return 0;
}