#include<stdio.h>
#include<fstream.h>
#define nmax 600000
#define nm 300001
#define cm 14
#define nil -10000
#define infi 10000
inline long minim(long a,long b) {return a<b?a:b;}
inline long maxim(long a,long b) {return a>b?a:b;}
long cautare(long);void add(long,long,long,long,long,long);long inter(long,long,long,long,long);
void refa(long);void merge_sort(long,long);void init();
long A[nm],B[nm],nr[nm],n,val[nmax],s[nmax],d[nmax],max[nmax],min[nmax];
int main()
{long i,d,m,j;
char c[nm][cm],s[cm];
freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
//scanf("%d",&m);
//fgets(c[0],cm,stdin);
i=1;
while(fgets(c[i++],cm,stdin));
m=i-2;
for(i=1;i<=m;i++)
if(c[i][0]=='I'||c[i][0]=='S'||c[i][0]=='C')
{j=2;
++nr[0];
while(c[i][j]>='0'&&c[i][j]<='9')
nr[nr[0]]=nr[nr[0]]*10+c[i][j++]-'0';
}
n=nr[0];
init();
memcpy(A,nr,sizeof(A));
merge_sort(1,n);
nr[0]=0;
for(i=1;i<=n;i++)
{nr[++nr[0]]=A[i];
while(A[i]==A[i+1]) i++;
}
n=nr[0];
for(i=1;i<=m;i++)
{//fgets(c,cm,stdin);
j=0;
s[0]=0;
while(c[i][j]!=' ')
s[++s[0]]=c[i][j++];
if(s[1]=='M'&&s[2]=='I')
{if(min[1]==nil) printf("-1\n");
else
printf("%ld\n",min[1]);}
else
if(s[1]=='M'&&s[2]=='A')
{if(max[1]==nil) printf("-1\n");
else
printf("%ld\n",max[1]);}
else
{d=0;j=2;
while(c[i][j]>='0'&&c[i][j]<='9')
d=d*10+c[i][j++]-'0';
j=cautare(d);
if(s[1]=='I')
{if(!inter(1,1,n,j,j))
add(1,1,n,d,j,1);
}
else if(s[1]=='S')
{if(inter(1,1,n,j,j))
add(1,1,n,d,j,-1);
else printf("-1\n");
}
else if(inter(1,1,n,j,j)) printf("1\n");
else printf("0\n");
}
}
fclose(stdout);
return 0;
}
void add(long nod,long st,long dr,long h,long a,long sum)
{long b,mij;
b=a;
if(a<=st&&b>=dr)
{val[nod]+=sum;
if(!val[nod])
s[nod]=d[nod]=nil;
else s[nod]=d[nod]=h;
refa(nod);
}
else
{mij=(st+dr)/2;
if(a<=mij)
add(nod*2,st,mij,h,b,sum);
if(b>mij)
add(nod*2+1,mij+1,dr,h,b,sum);
val[nod]+=sum*(b-a+1);
}
}
void refa(long nod)
{nod=nod/2;
while(nod)
{min[nod]=infi;
max[nod]=-1;
if(min[nod*2]) min[nod]=minim(min[nod*2],min[nod]);
if(min[nod*2+1]) min[nod]=minim(min[nod*2+1],min[nod]);
if(d[nod*2]!=nil&&s[nod*2+1]!=nil)
min[nod]=minim(s[nod*2+1]-d[nod*2],min[nod]);
if(max[nod*2]) max[nod]=maxim(max[nod*2],max[nod]);
if(max[nod*2+1]) max[nod]=maxim(max[nod*2+1],max[nod]);
if(s[nod*2]!=nil&&d[nod*2+1]!=nil)
max[nod]=maxim(d[nod*2+1]-s[nod*2],max[nod]);
if(s[nod*2+1]!=nil)
s[nod]=s[nod*2+1];
if(s[nod*2]!=nil)
s[nod]=s[nod*2];
if(d[nod*2]!=nil)
d[nod]=d[nod*2];
if(d[nod*2+1]!=nil)
d[nod]=d[nod*2+1];
nod/=2;
}
}
long inter(long nod,long st,long dr,long a,long b)
{long mij,s=0;
if(a<=st&&b>=dr)
return val[nod];
else
{mij=(st+dr)/2;
if(a<=mij) s+=inter(2*nod,st,mij,a,b);
if(b>mij) s+=inter(2*nod+1,mij+1,dr,a,b);
return s;
}
}
long cautare(long x)
{long ls,ld,mij;
ls=1;ld=n;
while(ls<=ld)
{mij=(ls+ld)/2;
if(nr[mij]>x)
ld=mij-1;
else if(nr[mij]<x)
ls=mij+1;
else return mij;
}
return mij;
}
void merge_sort(long l,long r)
{
int m = (l + r) >> 1, i, j, k;
if (l == r) return;
merge_sort(l, m);
merge_sort(m + 1, r);
for (i=l, j=m+1, k=l; i<=m || j<=r; )
if (j > r || (i <= m && A[i] < A[j]))
B[k++] = A[i++];
else
B[k++] = A[j++];
for (k = l; k <= r; k++) A[k] = B[k];
}
void init()
{long i;
for(i=0;i<nmax;i++)
s[i]=d[i]=nil;
}