#include<stdio.h>
#define fin "zeap.in"
#define fout "zeap.out"
#define NMAX 1000005
#define T 1000000001
long e,a[NMAX],v[NMAX],n,p[NMAX][2];
long segm[NMAX][4];
FILE *in,*out;
long max(long a,long b) { (a<b)?(a=b):(a); return a; }
long min(long a,long b) { (a>b)?(a=b):(a); return a; }
void qsort(long st,long dr) {
long m,i,j,aux;
m=a[(st+dr)/2];
i=st; j=dr;
do {
while (a[i]<m) i++;
while (a[j]>m) j--;
if (i<=j) { aux=a[i]; a[i]=a[j]; a[j]=aux; i++; j--; }
}while (i<j);
if (i<dr) qsort(i,dr);
if (j>st) qsort(st,j);
}
void insert(long nod,long st,long dr,long val) {
long m;
if (st==dr) { segm[nod][0]=segm[nod][1]=val; segm[nod][2]=T; }
else {
m=(st+dr)/2;
if (val<=v[m]) insert(2*nod,st,m,val);
if (val>v[m]) insert(2*nod+1,m+1,dr,val);
segm[nod][0]=min(segm[2*nod][0],segm[2*nod+1][0]);
segm[nod][1]=max(segm[2*nod][1],segm[2*nod+1][1]);
if (!segm[2*nod][0]) segm[nod][0]=segm[2*nod+1][0];
if (!segm[2*nod+1][0]) segm[nod][0]=segm[2*nod][0];
if (!segm[2*nod][1]) segm[nod][1]=segm[2*nod+1][1];
if (!segm[2*nod+1][1]) segm[nod][1]=segm[2*nod][1];
segm[nod][2]=T;
if (segm[2*nod][2]) segm[nod][2]=segm[2*nod][2];
if (segm[2*nod+1][2]) segm[nod][2]=min(segm[nod][2],segm[2*nod+1][2]);
if (segm[2*nod][0] && segm[2*nod+1][0])
segm[nod][2]=min(segm[nod][2],segm[2*nod+1][0]-segm[2*nod][0]);
if (segm[2*nod][0] && segm[2*nod+1][1])
segm[nod][2]=min(segm[nod][2],segm[2*nod+1][1]-segm[2*nod][0]);
if (segm[2*nod][1] && segm[2*nod+1][0])
segm[nod][2]=min(segm[nod][2],segm[2*nod+1][0]-segm[2*nod][1]);
if (segm[2*nod][1] && segm[2*nod+1][1])
segm[nod][2]=min(segm[nod][2],segm[2*nod+1][1]-segm[2*nod][1]);
}
}
void sters(long nod,long st,long dr,long val) {
long m;
if (st==dr) {
if(!segm[nod][0]) e=0;
segm[nod][0]=segm[nod][1]=0;
segm[nod][2]=T;
}
else {
m=(st+dr)/2;
if (val<=v[m]) sters(2*nod,st,m,val);
if (val>v[m]) sters(2*nod+1,m+1,dr,val);
segm[nod][0]=min(segm[2*nod][0],segm[2*nod+1][0]);
segm[nod][1]=max(segm[2*nod][1],segm[2*nod+1][1]);
if (!segm[2*nod][0]) segm[nod][0]=segm[2*nod+1][0];
if (!segm[2*nod+1][0]) segm[nod][0]=segm[2*nod][0];
if (!segm[2*nod][1]) segm[nod][1]=segm[2*nod+1][1];
if (!segm[2*nod+1][1]) segm[nod][1]=segm[2*nod][1];
segm[nod][2]=T;
if (segm[2*nod][2]) segm[nod][2]=segm[2*nod][2];
if (segm[2*nod+1][2]) segm[nod][2]=min(segm[nod][2],segm[2*nod+1][2]);
if (segm[2*nod][0] && segm[2*nod+1][0])
segm[nod][2]=min(segm[nod][2],segm[2*nod+1][0]-segm[2*nod][0]);
if (segm[2*nod][0] && segm[2*nod+1][1])
segm[nod][2]=min(segm[nod][2],segm[2*nod+1][1]-segm[2*nod][0]);
if (segm[2*nod][1] && segm[2*nod+1][0])
segm[nod][2]=min(segm[nod][2],segm[2*nod+1][0]-segm[2*nod][1]);
if (segm[2*nod][1] && segm[2*nod+1][1])
segm[nod][2]=min(segm[nod][2],segm[2*nod+1][1]-segm[2*nod][1]);
}
}
long cauta(long nod,long st,long dr,long val) {
long m;
if (st==dr) {
if (segm[nod][0]) return 1;
else return 0; }
else {
m=(st+dr)/2;
if (val<=v[m]) return cauta(2*nod,st,m,val);
if (val>v[m]) return cauta(2*nod+1,m+1,dr,val);
}
}
int main() {
char c;
long i,nr;
in=fopen(fin,"r"); out=fopen(fout,"w");
c=fgetc(in);
while (c!=EOF) {
if (c=='M') {
c=fgetc(in);
if (c=='A') p[++n][0]=1; //max
else p[++n][0]=2; //min
while (c!='\n' && c!=EOF) c=fgetc(in);
}
else {
if (c=='I') p[++n][0]=3; //insert
if (c=='S') p[++n][0]=4; //sterge
if (c=='C') p[++n][0]=5; //cauta
while (c<'0' || c>'9') c=fgetc(in);
nr=0;
while (c!='\n' && c!=EOF) { nr=nr*10+(c-'0'); c=fgetc(in); }
p[n][1]=nr;
a[++a[0]]=nr;
}
c=fgetc(in);
}
qsort(1,a[0]);
for (i=1;i<=a[0];i++)
if (a[i]!=a[i+1]) v[++v[0]]=a[i];
for (i=1;i<=n;i++) {
if (p[i][0]==1) {
if (segm[1][0]==segm[1][1]) fprintf(out,"-1\n");
else fprintf(out,"%ld\n",segm[1][1]-segm[1][0]); }
if (p[i][0]==2) {
if (segm[1][2]==T || !segm[1][2]) fprintf(out,"-1\n");
else fprintf(out,"%ld\n",segm[1][2]); }
if (p[i][0]==3) insert(1,1,v[0],p[i][1]);
if (p[i][0]==4) {
e=1; sters(1,1,v[0],p[i][1]);
if (!e) fprintf(out,"-1\n");
}
if (p[i][0]==5) if (!cauta(1,1,v[0],p[i][1])) fprintf(out,"0\n");
else fprintf(out,"1\n");
}
fclose(in); fclose(out);
return 0;
}