#include <fstream>
#include<time.h>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
int a1,a2;
void aloca(int *&v1,int *&v2,int n){
v1=(int*)calloc(n+1,sizeof(int));
v2=(int*)calloc(n+1,sizeof(int));
}
void reset(int n){
a1=rand()%n;
a2=rand()%n;
}
void inserare(int *v1,int *v2,int x,int n);
void rehash(int *v1,int *v2,int n){
int i;
reset(n);
for(i=0;i<=n;i++){
if(v1[i]!=0)inserare(v1,v2,v1[i],n);
if(v2[i]!=0)inserare(v1,v2,v2[i],n);
}
}
int h1(int x,int n){
long long c=a1;
c+=x;
c*=c;
c%=n;
return c;}
int h2(int x,int n){
long long c=a2;
c-=x;
c*=c;
c%=n;
return c;}
int cautare(int *v1,int *v2,int x,int n){
if((v1[h1(x,n)]==x)||(v2[h2(x,n)]==x))return 1;
return 0;
}
void inserare(int *v1,int *v2,int x,int n){
if(cautare(v1,v2,x,n)==0){
int ok=0,s=v1[h1(x,n)],aux,aux2,aux3;
if(v1[h1(x,n)]==0){v1[h1(x,n)]=x;
ok=1;}
else if(v2[h2(x,n)]==0){v2[h2(x,n)]=x;
ok=1;}
while(ok==0){
aux=v1[h1(x,n)];
aux2=v2[h2(x,n)];
if(aux==0){ok=1;
v1[h1(x,n)]=x;}
else if(aux2==0){ok=1;
v2[h2(x,n)]=x;}
else{
aux3=aux2;
v2[h2(x,n)]=v1[h1(x,n)];
v1[h1(x,n)]=x;
x=aux3;
if(s==x){rehash(v1,v2,n);
ok=1;}
}
}
}
}
void stergere(int *v1,int *v2,int x, int n){
if(cautare(v1,v2,x,n)==1){
if(v1[h1(x,n)]==x)v1[h1(x,n)]=0;
if(v2[h2(x,n)]==x)v2[h2(x,n)]=0;
}
}
int main(){
int n,*v1,*v2,i,op,x;
ifstream f("hashuri.in");
ofstream g("hashuri.out");
f>>n;
aloca(v1,v2,n);
reset(n);
for(i=1;i<=n;i++){
f>>op>>x;
if(op==1)inserare(v1,v2,x,n);
if(op==2)stergere(v1,v2,x,n);
if(op==3){
if(cautare(v1,v2,x,n)==1)
g<<1<<"\n";
else g<<0<<"\n";
}
}
}