#include<cstdio>
#include<ctime>
#include<cstdlib>
using namespace std;
int po,x,INS,INF;
char sir[19];
struct T
{
int P,K,mini,maxi,dfmin;
T *l,*r;
T(int K,int P,int mini,int maxi,int dfmin,T *l,T *r)
{
this->K=K;
this->P=P;
this->maxi=maxi;
this->mini=mini;
this->dfmin=dfmin;
this->l=l;
this->r=r;
}
}*R,*nil;
int Rand(){return (((rand()%32767)<<15)+(rand()%32767))+1;}
void reup(T *&n)
{
n->mini=n->maxi=n->K;
if(n->l->mini<n->mini) n->mini=n->l->mini;
if(n->r->mini<n->mini) n->mini=n->r->mini;
if(n->r->maxi>n->maxi) n->maxi=n->r->maxi;
if(n->l->maxi>n->maxi) n->maxi=n->l->maxi;
if(n->l==nil&&n->r==nil) n->dfmin=INF;
else
{
n->dfmin=INF;
if(n->l!=nil) n->dfmin=n->K-n->l->maxi;
if(n->r!=nil&&n->dfmin>n->r->mini-n->K) n->dfmin=n->r->mini-n->K;
if(n->l!=nil&&n->l->dfmin<n->dfmin) n->dfmin=n->l->dfmin;
if(n->r!=nil&&n->r->dfmin<n->dfmin) n->dfmin=n->r->dfmin;
}
}
void rotleft(T *&n)
{
T *t=n->l;
n->l=t->r;t->r=n;
reup(n);
reup(t);
n=t;
}
void rotright(T *&n)
{
T *t=n->r;
n->r=t->l;t->l=n;
reup(n);
reup(t);
n=t;
}
void balance(T *&n)
{
if(n->l->P>n->P) rotleft(n);
else
if(n->r->P>n->P) rotright(n);
}
void Insert(T *&n,int K)
{
if(n==nil)
{
n=new T(K,Rand(),K,K,INF,nil,nil);
return ;
}
if(n->K<K) Insert(n->r,K);
else
if(n->K>K) Insert(n->l,K);
else return ;
reup(n);
balance(n);
}
void Erase(T *&n,int K)
{
if(n==nil)
{
printf("-1\n");
return ;
}
if(n->K>K) Erase(n->l,K);
else
if(n->K<K) Erase(n->r,K);
else
{
if(n->l==nil&&n->r==nil)
{
delete n;
n=nil;
}
else
{
if(n->l->P>n->r->P) rotleft(n);
else rotright(n);
Erase(n,K);
}
}
if(n!=nil) reup(n);
}
int Search(T *&R,int K)
{
if(R==nil) return 0;
if(R->K>K) return Search(R->l,K);
else
if(R->K<K) return Search(R->r,K);
else return 1;
}
void val(int &x)
{
x=0;
while(sir[po]>='0'&&sir[po]<='9')
{
x=x*10+sir[po]-48;
po++;
}
po++;
}
int main()
{
freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
srand(time(0));
INF=(1<<30)+2;
nil=new T(0,0,INF,-INF,INF,0,0);
INF=(1<<30)+3;
INS=0;
while(!feof(stdin))
{
gets(sir+1);
if(feof(stdin)) break;
if(sir[1]=='I')
{
po=3;
val(x);
INS++;
if(INS==1) R=new T(x,Rand(),x,x,INF,nil,nil);
else Insert(R,x);
}
else
if(sir[1]=='S')
{
po=3;
val(x);
Erase(R,x);
}
else
if(sir[1]=='C')
{
po=3;
val(x);
printf("%d\n",Search(R,x));
}
else
if(sir[2]=='I')
{
if(R->dfmin>=INF) printf("-1\n");
else printf("%d\n",R->dfmin);
}
else
{
if(R->dfmin>=INF) printf("-1\n");
else printf("%d\n",R->maxi-R->mini);
}
}
return 0;
}