#include <iostream>
#include <cstdio>
#include <math.h>
using namespace std;
#define m 131072
#define max(a, b) ((a) > (b) ? (a):(b))
#define geth(n) (n->h = 1 + max(n->l->h, n->r->h))
FILE *f = fopen("zeap.in", "rt");
FILE *g = fopen("zeap.out", "wt");
int MI;
struct nod
{
int key, dif, h;
nod *l, *r;
}*rad,*nil;
void init()
{
nil = rad = new nod;
nil->dif = nil->h = nil->key = 0;
nil->l = nil->r = NULL;
rad = nil;
}
nod *rotright(nod *n)
{
n->h = geth(n);
nod *t = n->l;
n->l = t->r;
t->r = n;
geth(n); geth(t);
return t;
}
nod *rotleft(nod *n)
{
n->h = geth(n);
nod *t = n->r;
n->r = t->l;
t-> l = n;
geth(n); geth(t);
return t;
}
int q,b;
void mini(nod *n)
{
if(n->l != nil)
{
mini(n->l);
}
if(b > fabs(n->key - q))b=fabs(n->key - q);
q = n->key;
if(n->r != nil)
mini(n->r);
}
int maxim(nod *n)
{
nod *t;
int a,b;
if(rad == nil || (rad->l==nil && rad->r == nil))return -1;
t=n;
for(t;t->l!=nil;t=t->l);
a=t->key;
for(t=n;t->r!=nil;t=t->r);
b=t->key;
return b-a;
}
void minim(nod *n)
{
if((n->l != nil || n->r != nil )&& n->dif < MI)MI = n->dif;
if(n->l != nil)minim(n->l);
if(n->r!=nil)minim(n->r);
}
int calcdif(nod *n)
{
nod *t;
if(n->l != nil)
{
for(t=n->l;t->r != nil; t = t->r);
if(n->dif > n->key - t->key) n->dif = n->key - t->key;
}
if(n->r != nil)
{
for(t = n->r; t->l != nil; t = t->l);
if(n->dif > t->key - n->key)n->dif = t->key - n->key;
}
return n->dif;
}
nod *balance(nod *n)
{
n->h = geth(n);
if(n->l->h > n->r->h + 1)
{
if(n->l->r->h > n->l->l->h)n->l = rotleft(n->l);
n = rotright(n);
}
else if(n->r->h > n->l->h + 1)
{
if(n->r->l->h > n->r->r->h)n->r=rotright(n->r);
n= rotleft(n);
}
// n->dif = 1<<30;
// n->dif = calcdif(n);
return n;
}
nod *inser(nod *n, int k)
{
if(n == nil)
{
n = new nod;
n->key = k;
n->h = 1;
n->l = n->r = nil;
// n->dif = 1<<30;
return n;
}
if(n->key > k)
n->l = inser(n->l, k);
else n->r = inser(n->r, k);
return balance(n);
}
nod *sterg(nod *n, int k)
{
if(n == nil) {fprintf(g, "-1\n");return n;}
nod *t;
if(n->key == k)
{
if(n->l == nil || n->r == nil)
{//maybe not
if(n->l == nil)t=n->r;
else t=n->l;
delete n;
return t;
}
else
{
for(t = n->r; t->l != nil; t=t->l);
n->key = t->key;
n->r = sterg(n->r, t->key);
return balance(n);
}
}
else if(n->key > k)n->l = sterg(n->l, k);
else n->r = sterg(n->r, k);
balance (n);
}
int caut(nod *n, int k)
{
if(n == nil)return 0;
if(n->key == k)return 1;
if(n->key > k)return caut(n->l, k);
else return caut(n->r, k);
}
char buff[m+14];
int c;
int pars()
{c+=2;
if(c >=m){buff[fread(buff, 1, m, f)]=0;c=c-m;}
int x=0;
while('0'<=buff[c]&&'9'>=buff[c])
{
x = x*10 + buff[c]-'0';
c++;
if(c >=m){buff[fread(buff, 1, m, f)]=0;c=c-m;}
}
c++;if(c >=m){buff[fread(buff, 1, m, f)]=0;c=c-m;}
return x;
}
int main()
{
int x;
buff[fread(buff, 1, m, f)] = 0;
init();
while(buff[c]&&buff[c]!='\n')
{
if(buff[c] == 'I')
{
x = pars();
rad = inser(rad, x);
}
else if(buff[c] == 'S')
{
x = pars();
rad = sterg(rad, x);
}
else if(buff[c] == 'C')
{
x = pars();
fprintf(g, "%d\n", caut(rad, x));
}
else if(buff[c+1] == 'A')
{
fprintf(g,"%d\n", maxim(rad));
c+=4;
if(c >=m){buff[fread(buff, 1, m, f)] =0;c=c-m;}
}
else
{
if(rad->l==nil && rad->r == nil)fprintf(g,"-1\n");
else
{
b = q = 1<<30;
mini(rad);
fprintf(g, "%d\n", b);
}
c+=4;if(c >=m){buff[fread(buff, 1, m, f)] = 0;c=c-m;}
}
}
return 0;
}