#include <iostream>
#include <stdio.h>
#include <fstream>
#include <cmath>
#define max(a,b) ((a) > (b) ? a : b)
#define geth(n) (n->h =1 + max(n->l->h, n->r->h))
#define M 131072
char buff[M+14];
using namespace std;
FILE *f = fopen("zeap.in", "r");
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;
}
char s[21];
int nr,a,b, mi, ok;
struct nod
{
int k, h;
nod *l, *r;
}*rad, *nil;
void init()
{
rad = nil = new nod;
nil->r = nil->l = NULL;
nil->k= nil->h = 0;
rad = nil;
}
nod *rotright(nod *n)
{
nod *t = n->l;
n->l = t->r;
t->r = n;
geth(n); geth(t);
return t;
}
nod *rotleft(nod *n)
{
nod *t = n->r;
n->r = t->l;
t->l = n;
geth(n); geth(t);
return t;
}
nod * balance(nod *n)
{
geth(n);
if(n->l->h > n->r->h + 1)
{
if(n->l->l->h < n->l->r->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);
}
return n;
}
nod *insera(nod *n, int k)
{
if(n == nil)
{
nr++;
n = new nod;
n->k = k; n->h = 1;
n->l = n->r = nil;
return n;
}
else if(n->k > k)
{
if(n->k - k < mi){mi = n->k - k; a = k; b = n->k;}
n->l = insera(n->l, k);
}
else
if(n->k < k)
{
if(k - n->k < mi){mi = k - n->k; a = n->k; b = k;}
n->r = insera(n->r, k);
}
else return n;
return balance(n);
}
nod *sterge(nod *n, int k)
{
if(n == nil)
{
printf("-1\n");
return n;
}
if(n->k == k)
{ nr--;
nod *t;
if(n->l == nil || n->r == nil)
{
if(n->l == nil)t=n->r;
else t=n->l;
delete n;
return t;
}
else
{
t = n->r;
for(; t->l!=nil; t=t->l);
n->k = t->k;nr++;
n->r = sterge(n->r,t->k);
return balance(n);
}
}
if(n->k > k)n->l = sterge(n->l, k);
else n->r = sterge(n->r, k);
return balance(n);
}
int caut(nod *n , int k)
{
if(k == n->k)return 1;
if(n == nil) return 0;
if(n->k > k) return caut(n->l, k);
else return caut(n->r, k);
}
int maxi(nod *n)
{
nod *t;
int nrmic;
for(t = n; t->l != nil; t=t->l);
nrmic = t->k;
for(t = n; t->r != nil; t=t->r);
return t->k - nrmic;
}
int t1,t2;
void minima(nod *n)
{
if(n->l != nil)
{
minima(n->l);
}
if(n->k - t1 < mi){mi= n->k - t1;a=n->k;b=t1;}
t1 = n->k;
if(n->r != nil)minima(n->r);
}
int main()
{
int x;
freopen("zeap.out", "w", stdout);
init();
mi=1<<30;
buff[fread(buff, 1, M, f)] = 0;
/*
while(fgets(s,20,f))
{
if(s[0] == 'M')
{
if(s[1] == 'A')
{
if(nr < 2) printf("-1\n");
else printf("%d\n", maxi(rad));
}
else
{
if(nr < 2) printf("-1\n");
else if(ok == 0)printf("%d\n", mi);
else
{
t1=-12345678;
mi=1<<30;
minima(rad);
ok=0;
printf("%d\n", mi);
}
}
}
else
{
x = 0;
i = 2;
while(s[i] >= '0' && s[i] <= '9')x = x*10 +s[i++]-'0';
if(s[0] == 'I')
{
rad = insera(rad, x);
}
else if(s[0] == 'S')
{
if(a == x || b == x)ok = 1;
rad = sterge(rad, x);
}
else if(s[0] == 'C')
{
printf("%d\n", caut(rad, x));
}
}
}
*/
while(buff[c]&&buff[c]!='\n')
{
if(buff[c] == 'I')
{
x = pars();
rad = insera(rad, x);
}
else if(buff[c] == 'S')
{
x = pars();
if(a == x || b == x)ok = 1;
rad = sterge(rad, x);
}
else if(buff[c] == 'C')
{
x = pars();
printf("%d\n", caut(rad, x));
}
else if(buff[c+1] == 'A')
{
if(nr < 2) printf("-1\n");
else printf("%d\n", maxi(rad));
c+=4;
if(c >=M)
{
buff[fread(buff, 1, M, f)] =0;
c=c-M;
}
}
else
{
if(nr < 2) printf("-1\n");
else if(ok == 0)printf("%d\n", mi);
else
{
t1=-12345678;
mi=1<<30;
minima(rad);
ok=0;
printf("%d\n", mi);
}
c+=4;
if(c >=M)
{
buff[fread(buff, 1, M, f)] = 0;
c=c-M;
}
}
}
return 0;
}