#include<cstdio>
#include<time.h>
#include<algorithm>
using namespace std;
#define Inf 0x3f3f3f3f
#define Max 54254385
inline int MAX(int a, int b) { return a>b?a:b; }
inline int MIN(int a, int b) { return a<b?a:b; }
struct T
{
T *l, *r;
int key, pr, min, max, difmin;
T() {}
T(int key, int pr, int min, int max, int difmin, T* l, T* r)
{
this->l = l; this->r = r;
this->key = key; this->pr = pr; this->min = min; this->max = max;
this->difmin=difmin;
}
};
T *R,*nil;
inline int find(T* n, int val)
{
if(n == nil) return 0;
if(n->key == val) return 1;
if(val < n->key) return find(n->l, val);
return find(n->r, val);
}
inline void update(T* &n)
{
n->min = MIN(n->key, n->l->min);
n->max = MAX(n->key, n->r->max);
n->difmin = MIN(MIN(n->l->difmin, n->r->difmin), MIN(n->key - n->l->max, n->r->min - n->key));
}
inline void rotleft(T* &n)
{
T *t = n->l;
n->l = t->r;
t->r = n;
n = t;
//if(n!=nil && n->l != nil)
}
inline void rotright(T* &n)
{
T *t = n->r;
n->r = t->l;
t->l = n;
n = t;
// if(n!=nil && n->r != nil) update(n->r);
}
void balance(T* &n)
{
if(n->l->pr > n->pr) { rotleft(n); update(n->r); }
else if(n->r->pr > n->pr){ rotright(n); update(n->l); }
update(n);
}
void insert(T* &n, int key, int pr)
{
if(n == nil)
{
n = new T(key,pr,key,key,Inf,nil,nil);
update(n);
return;
}
if(key < n->key) insert(n->l,key,pr);
else if(key > n->key) insert(n->r,key,pr);
balance(n);
}
void erase(T* &n, int key)
{
if(n == nil) return;
if(key < n->key) erase(n->l, key);
else if(key > n->key) erase(n->r,key);
else if(n->key == key)
{
if(n->r == nil && n->l == nil)
{
delete n;
n = nil;
return;
}
if(n->l->pr > n->r->pr) rotleft(n);
else rotright(n);
erase(n,key);
}
update(n);
}
int main()
{
char op[4];
int x, cnt = 0;
freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
srand(time(0));
R = nil = new T(0,0,Inf,-Inf,Inf,NULL,NULL);
while(!feof(stdin))
{
scanf("%c",&op[0]);
switch(op[0])
{
case 'I':
{
scanf(" %d\n",&x);
if(!find(R,x))
{ ++cnt; insert(R,x, rand()%Max + 1); }
break;
}
case 'S':
{
scanf(" %d\n",&x);
if(!find(R,x)) printf("-1\n");
else { cnt--; erase(R,x);}
break;
}
case 'C':
{
scanf(" %d\n",&x);
printf("%d\n",find(R,x));
break;
}
case 'M':
{
scanf("%c%c\n",&op[1],&op[2]);
if(cnt < 2) { printf("-1\n"); break; }
if(op[1] == 'A')
{
printf("%d\n",R->max - R->min);
}
else printf("%d\n",R->difmin);
break;
}
}
}
return 0;
}