#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <iostream>
using namespace std;
FILE * f1=fopen("zeap.in", "r");
FILE * f2=fopen("zeap.out", "w");
int nrel;
struct treap
{
treap *l, *r;
int cheie, prior;
int mini, maxi, dfmin; ///mini, maxi subarbore, dfmin dintre oricare 2 val din subarb
} *rad;
void Creare(treap *&el, int cheie)
{
el=new treap;
el->cheie=cheie;
el->prior=rand();
el->mini=el->maxi=cheie;
el->l=el->r=0;
el->dfmin=2000000001;
}
void Update(treap *nod)
{
if(nod==0) return;
if(nod->l!=0)
{
nod->mini=min(nod->mini, nod->l->mini);
nod->maxi=max(nod->maxi, nod->l->maxi);
nod->dfmin=min(abs(nod->cheie- nod->l->cheie), min(nod->dfmin, nod->l->dfmin));
}
if(nod->r!=0)
{
nod->mini=min(nod->mini, nod->r->mini);
nod->maxi=max(nod->maxi, nod->r->maxi);
nod->dfmin=min(abs(nod->cheie- nod->r->cheie), min(nod->dfmin, nod->r->dfmin));
}
}
void Split(treap *rad, treap *&l, treap *&r, int cheie)
{
if(rad==0) l=r=0;
else if(rad->cheie> cheie)
{
Split(rad->l, l, rad->l,cheie);
r=rad;
}
else
{
Split(rad->r, rad->r, r, cheie);
l=rad;
}
Update(rad);
}
void Merge(treap *&rad, treap *l, treap *r)
{
if(l==0) rad=r;
else if(r==0) rad=l;
else if(l->prior> r->prior)
{
Merge(l->r, l->r, r);
rad=l;
}
else
{
Merge(r->l, l, r->l);
rad=r;
}
Update(rad);
}
int Cauta(treap *rad, int cheie)
{
if(rad==0) return 0;
else if(rad->cheie==cheie) return 1;
else if(rad->cheie> cheie) return Cauta(rad->l, cheie);
else return Cauta(rad->r, cheie);
}
void Adauga(treap *& rad, treap * el)
{
treap *l, *r;
if(Cauta(rad, el->cheie)) ;
else
{
nrel++;
Split(rad, l, r, el->cheie);
Merge(l, l, el);
Merge(rad, l, r);
}
}
void Sterge(treap *&rad, int cheie)
{
if(!Cauta(rad, cheie)) fprintf(f2, "%d\n", -1);
else
{
nrel--;
treap *l, *r, *aux;
Split(rad, rad, r, cheie);
Split(rad, l, aux, cheie -1);
Merge(rad, l, r); ///l- <=cheie-1, r- >cheie
}
}
int Maxim(treap * rad)
{
if(nrel<2) return -1;
else return ((rad->maxi)-(rad->mini));
}
int Minim(treap * rad)
{
if(nrel<2) return -1;
else return rad->dfmin;
}
int main()
{
treap *el;
char sir[15];
int nr;
while(fgets(sir, 15, f1))
{
if(sir[0]!='M') nr=atoi(sir+2);
if(sir[0]=='I') {Creare(el, nr); Adauga(rad, el);}
if(sir[0]=='S') Sterge(rad, nr);
if(sir[0]=='C') fprintf(f2, "%d\n", Cauta(rad, nr));
if((sir[0]=='M')&&(sir[1]=='I')) fprintf(f2, "%d\n", Minim(rad));
if((sir[0]=='M')&&(sir[1]=='A')) fprintf(f2, "%d\n", Maxim(rad));
}
return 0;
}