#include <bits/stdc++.h>
//#pragma GCC optimize("O3")
using namespace std;
ifstream fin("zeap.in");
ofstream fout("zeap.out");
mt19937 rng(time(NULL));
struct Treap
{
int mind,valmin,valmax,data,pri,lg;
Treap* lft,*rgt;
Treap(int val)
{
lg=1;
data=val;
pri=rng();
lft=NULL;
rgt=NULL;
mind=2e9;
valmin=val;
valmax=val;
}
};
Treap* t;
int size(Treap* me)
{
if(me==NULL)
return 0;
return me->lg;
}
void recalc(Treap* me)
{
if(me==NULL)
return;
if(me->lft!=NULL&&me->rgt!=NULL)
{
me->lg=me->lft->lg+me->rgt->lg+1;
me->valmin=min(me->data,min(me->lft->valmin,me->rgt->valmin));
me->valmax=max(me->data,max(me->lft->valmax,me->rgt->valmax));
me->mind=min(me->lft->mind,me->rgt->mind);
me->mind=min(me->mind,me->data-me->lft->valmax);
me->mind=min(me->mind,me->rgt->valmin-me->data);
}
if(me->lft!=NULL&&me->rgt==NULL)
{
me->lg=me->lft->lg+1;
me->valmin=min(me->data,me->lft->valmin);
me->valmax=max(me->data,me->lft->valmax);
me->mind=me->lft->mind;
me->mind=min(me->mind,me->data-me->lft->valmax);
}
if(me->lft==NULL&&me->rgt!=NULL)
{
me->lg=me->rgt->lg+1;
me->valmin=min(me->data,me->rgt->valmin);
me->valmax=max(me->data,me->rgt->valmax);
me->mind=me->rgt->mind;
me->mind=min(me->mind,me->rgt->valmin-me->data);
}
if(me->lft==NULL&&me->rgt==NULL)
{
me->lg=1;
me->valmin=me->valmax=me->data;
me->mind=2e9;
}
}
array<Treap*,2> split(Treap* me, int key)
{
if(me==NULL)
return {NULL,NULL};
if(me->data<key)
{
array<Treap*,2> a=split(me->rgt,key);
Treap* l=me;
Treap* r=a[1];
l->rgt=a[0];
recalc(l);
recalc(r);
return {l,r};
}
else
{
array<Treap*,2> a=split(me->lft,key);
Treap* l=a[0];
Treap* r=me;
r->lft=a[1];
recalc(l);
recalc(r);
return {l,r};
}
}
array<Treap*,2> splitrange(Treap* me, int nr)
{
if(me==NULL)
return {NULL,NULL};
if(nr==0)
return {NULL,me};
if(nr==me->lg)
return {me,NULL};
if(size(me->lft)<nr)
{
int X=size(me->lft);
array<Treap*,2> a=splitrange(me->rgt,nr-X-1);
Treap* l=me;
l->rgt=a[0];
Treap* r=a[1];
recalc(l);
recalc(r);
return {l,r};
}
else
{
array<Treap*,2> a=splitrange(me->lft,nr);
Treap* l=a[0];
Treap* r=me;
r->lft=a[1];
recalc(l);
recalc(r);
return {l,r};
}
}
Treap* merge(Treap* a, Treap* b)
{
if(a==NULL)
return b;
if(b==NULL)
return a;
if(a->pri>b->pri)
{
Treap* rez=a;
rez->rgt=merge(a->rgt,b);
recalc(rez);
return rez;
}
else
{
Treap* rez=b;
rez->lft=merge(a,b->lft);
recalc(rez);
return rez;
}
}
void putin(int val)
{
Treap* nod=new Treap(val);
if(t==NULL)
{
t=nod;
return;
}
array<Treap*,2> a=split(t,val);
t=a[0];
t=merge(t,nod);
t=merge(t,a[1]);
}
bool putout(int val)
{
if(t==NULL)
return 0;
array<Treap*,2> a=split(t,val);
array<Treap*,2> b=split(a[1],val+1);
bool found=0;
if(b[0]!=NULL)
found=1;
t=a[0];
t=merge(t,b[1]);
return found;
}
int getmin(int l,int r)
{
if(r-l+1==1)
return -1;
array<Treap*,2> a=splitrange(t,l-1);
array<Treap*,2> b=splitrange(a[1],r-l+1);
int rez=b[0]->mind;
t=merge(b[0],b[1]);
t=merge(a[0],t);
return rez;
}
int getmax(int l,int r)
{
if(r-l+1==1)
return -1;
array<Treap*,2> a=splitrange(t,l-1);
array<Treap*,2> b=splitrange(a[1],r-l+1);
int rez=b[0]->valmax-b[0]->valmin;
t=merge(b[0],b[1]);
t=merge(a[0],t);
return rez;
}
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(0);
string tip;
while(fin>>tip)
{
if(tip=="I")
{
int x;
fin>>x;
putout(x);
putin(x);
continue;
}
if(tip=="S")
{
int x;
fin>>x;
bool ok=0;
if(x==3)
ok=1;
bool found=putout(x);
if(!found)
fout<<-1<<'\n';
continue;
}
if(tip=="C")
{
int x;
fin>>x;
bool ok=0;
if(x==1)
ok=1;
bool found=putout(x);
if(found)
{
fout<<1<<'\n';
putin(x);
}
else
fout<<0<<'\n';
continue;
}
if(tip=="MAX")
{
fout<<t->valmax-t->valmin<<'\n';
continue;
}
if(tip=="MIN")
{
fout<<t->mind<<'\n';
continue;
}
}
return 0;
}