#include <fstream>
#include <cstdio>
#include <string>
#include <cstdlib>
#include <ctime>
#define inf 1e9
using namespace std;
ifstream f("zeap.in");
ofstream g("zeap.out");
struct treap{
int key,pr,mx,mn,mndif;
treap *st, *dr;
treap(int _key,int _pr) : key(_key) , pr(_pr) {mn = mx = key; st = dr = NULL;}
void update()
{
if (this == NULL)
return;
mndif = inf;
mn = mx = key;
if (dr!=NULL)
{
mx = max(mx,dr->mx);
mn = min(mn,dr->mn);
mndif = dr->mndif;
}
if (st!=NULL)
{
mx = max(mx,st->mx);
mn = min(mn,st->mn);
mndif = min(mndif,st->mndif);
}
mndif = min(mndif,min(st!=NULL? key - st->mx : (int)inf,dr!=NULL ? dr->mn - key : (int)inf));
}
}*T;
int nr,x;
string s;
void split(treap *T, int key, treap *&l, treap *&r)
{
if (T==NULL)
l = r = NULL;
else if (T->key>=key)
split(T->st,key,l,T->st),r = T;
else
split(T->dr,key,T->dr,r),l = T;
T->update();
}
void merge(treap *&T,treap *l,treap *r)
{
if (l==NULL)
T = r;
else if (r==NULL)
T = l;
else if (l->pr>r->pr)
merge(l->dr,l->dr,r),T = l;
else
merge(r->st,l,r->st),T = r;
T->update();
}
void insert(treap *&T,treap *x)
{
if (T==NULL)
T = x;
else if (x->pr > T->pr)
split(T,x->key,x->st,x->dr),T = x;
else if(x->key < T->key)
insert(T->st,x);
else
insert(T->dr,x);
T->update();
}
int erase(treap *&T,int key)
{
int x;
if (T == NULL)
return 1;
if (T->key==key)
{
merge(T,T->st,T->dr);
return 0;
}
else if(T->key>key)
x = erase(T->st,key);
else
x = erase(T->dr,key);
T->update();
return x;
}
int search(treap *&T,int key)
{
if (T==NULL)
return 0;
if (T->key==key)
return 1;
if (T->key>key)
return search(T->st,key);
else
return search(T->dr,key);
}
int main()
{
srand(time(NULL));
T = NULL;
while (f>>s)
{
if (s=="MAX")
{
if (nr<2)
g<<"-1\n";
else
g<<T->mx - T->mn<<'\n';
}
else if (s=="MIN")
{
if (nr<2)
g<<"-1\n";
else
g<<T->mndif<<'\n';
}
else if (s=="C")
{
f>>x;
g<<search(T,x)<<'\n';
}
else if (s=="I")
{
f>>x;
if (!search(T,x))
{
nr++;
insert(T,new treap(x,rand()+1));
}
}
else
{
f>>x;
if(erase(T,x))
g<<"-1\n";
else
nr--;
}
}
return 0;
}