#include <cstdio>
#include <ctime>
#include <cstdlib>
#define file_in "zeap.in"
#define file_out "zeap.out"
#define inf 0x3f3f3f3f
struct nod{
int val;
int p;
int min;
int max;
int dif;
nod * st, *dr;
nod(){};
nod(int val, int p, int min, int max, int dif, nod * st, nod *dr){
this->val=val;
this->p=p;
this->min=min;
this->max=max;
this->dif=dif;
this->st=st;
this->dr=dr;
}
}
*R,*nil;
char s[1000];
int x,i;
inline int min(int a, int b) { return a<b?a:b; }
inline int max(int a, int b) { return a>b?a:b; }
inline int abs(int a) { return a>=0?a:-a; }
void act(nod *& c){
c->min=min(c->min,c->st->min);
c->max=max(c->max,c->dr->max);
c->dif=min(min(c->st->dif,c->dr->dif),min(abs(c->st->min-c->val),abs(c->dr->max-c->val)));
}
void init(nod *& R){
srand(time(0));
R=nil=new nod(0,0,inf,-inf,inf,NULL,NULL);
}
void rotst(nod *& c){
nod * v=c->st;
c->st=v->dr;
v->dr=c;
c=v;
if (c!=nil && c->dr!=nil)
act(c->dr);
}
void rotdr(nod *& c){
nod * v=c->dr;
c->dr=v->st;
v->st=c;
c=v;
if (c!=nil && c->st!=nil)
act(c->st);
}
void balance(nod *& c){
if (c->st->p>c->p)
rotst(c);
if (c->dr->p>c->p)
rotdr(c);
act(c);
}
void inserare(nod *& c, int x, int p){
if (c==nil){
c=new nod(x,p,x,x,inf,nil,nil);
return;
}
if (c->val>x)
inserare(c->st,x,p);
else
inserare(c->dr,x,p);
balance(c);
}
int cautare(nod *& c, int x){
if (c==nil)
return 0;
if (c->val==x)
return 1;
if (c->val>x)
return cautare(c->st,x);
else
return cautare(c->dr,x);
}
void stergere(nod *& c, int x){
if (c==nil)
return ;
if (c->val==x){
if (c->st==nil && c->dr==nil){
delete c;
c=nil;
}
else
if (c->st->p>c->dr->p)
rotst(c);
else
rotdr(c);
stergere(c,x);
}
else
if (c->val>x)
stergere(c->st,x);
else
stergere(c->dr,x);
if (c!=nil)
act(c);
}
int main(){
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
init(R);
while(fgets(s,1000,stdin)){
if (s[0]=='I'){
i=2;
x=0;
while(s[i]>='0' && s[i]<='9'){
x=x*10+s[i]-'0';
i++;
}
if (!cautare(R,x))
inserare(R,x,rand()+1);
}
else
if (s[0]=='S'){
i=2;
x=0;
while(s[i]>='0' && s[i]<='9'){
x=x*10+s[i]-'0';
i++;
}
if (cautare(R,x))
stergere(R,x);
else
printf("-1\n");
}
else
if (s[0]=='C'){
i=2;
x=0;
while(s[i]>='0' && s[i]<='9'){
x=x*10+s[i]-'0';
i++;
}
printf("%d\n", cautare(R,x));
}
else
if (s[0]=='M' && s[1]=='A'){
if (R->st==nil && R->dr==nil)
printf("-1\n");
else
printf("%d\n", R->max-R->min);
}
else{
if (R->st==nil && R->dr==nil)
printf("-1\n");
else
printf("%d\n", R->dif);
}
}
return 0;
}