#include <fstream>
#include <sstream>
#include <algorithm>
using namespace std;
const int Inf=1000000001;
struct T{
int key,prt;
int Min,Max,mindif;
T *left,*right;
T() {}
T(int K,int P,T *L,T *R){
this->key=K;
this->prt=P;
this->left=L;
this->right=R;
}
} *R,*nil;
void Init(){
srand((unsigned)time(0));
R=nil=new T(0,0,NULL,NULL);
R->mindif=nil->mindif=Inf;
R->Min=nil->Min=Inf;
R->Max=nil->Max=-Inf;
}
int Search(T *n,int x){
if (n==nil) return 0;
if (n->key==x) return 1;
if (n->key>x) return Search(n->left,x);
return Search(n->right,x);
}
void Update(T* &n){
n->Max=max(n->key,n->right->Max);
n->Min=min(n->key,n->left->Min);
n->mindif=min(min(n->left->mindif,n->right->mindif),
min(n->key - n->left->Max, n->right->Min - n->key));
}
void Rotleft(T* &n){
T *P=n->left;
n->left=P->right;
P->right=n;
n=P;
}
void Rotright(T* &n){
T *P=n->right;
n->right=P->left;
P->left=n;
n=P;
}
void Insert(T* &n,int x,int p){
if (n==nil) {n=new T(x,p,nil,nil);
Update(n);
return;}
if (n->key>x) Insert(n->left,x,p);
else Insert(n->right,x,p);
if (n->left->prt > n->prt)
Rotleft(n),Update(n->right);
else
if (n->right->prt > n->prt)
Rotright(n),Update(n->left);
Update(n);
}
void Erase(T* &n,int x){
if (n==nil) return;
if (n->key>x) Erase(n->left,x);
else if (n->key<x) Erase(n->right,x);
else
if (n->left==nil && n->right==nil)
{delete n,n=nil;return;}
else
{
if (n->right->prt > n->left->prt)
Rotright(n),Erase(n->left,x);
else
Rotleft(n),Erase(n->right,x);
}
Update(n);
}
int main(){
ifstream f("zeap.in");
ofstream g("zeap.out");
string s,op;
int N=0,x;
Init();
while (getline(f,s)){
istringstream is(s);
is>>op;
if (op=="I") {is>>x;if (!Search(R,x)) Insert(R,x,1+rand()),++N;}
else
if (op=="S") {is>>x;if (Search(R,x)) Erase(R,x),--N;
else g<<"-1\n";}
else
if (op=="C") {is>>x;g<<Search(R,x)<<'\n';}
else
if (op=="MAX") {if (N>=2) g<<R->Max - R->Min<<'\n';
else g<<"-1\n";}
else
if (op=="MIN") {if (N>=2) g<<R->mindif<<'\n';
else g<<"-1\n";}
}
f.close();g.close();
return 0;
}