#include<bits/stdc++.h>
#define inf 1e9
#define NMAX 100005
#define MOD 1000000007
using namespace std;
typedef long long ll;
struct treap{
treap *left,*right;
ll mi,ma,ansmi,ansma,val,pri;
treap()
{
left=right=nullptr;
ma=ansma=val=0;
mi=ansmi=inf;
}
treap(int x)
{
left=right=nullptr;
mi=ma=val=x;
pri=rand();
ansmi=inf;
ansma=0;
}
}*root;
void update(treap*act)
{
if(act==nullptr)return ;
ll ok=0;
act->mi=act->ma=act->val;
act->ansmi=inf;
act->ansma=0;
if(act->left)
{
act->mi=min(act->mi,act->left->mi);
act->ma=max(act->ma,act->left->ma);
act->ansmi=min(act->ansmi,(act->val - act->left->ma));
act->ansma=max(act->ansma,(act->val - act->left->mi));
act->ansmi=min(act->ansmi,act->left->ansmi);
act->ansma=max(act->ansma,act->left->ansma);
}
if(act->right)
{
act->mi=min(act->mi,act->right->mi);
act->ma=max(act->ma,act->right->ma);
act->ansmi=min(act->ansmi,(act->right->ma - act->val));
act->ansma=max(act->ansma,(act->right->mi - act->val));
act->ansmi=min(act->ansmi,act->right->ansmi);
act->ansma=max(act->ansma,act->right->ansma);
}
}
void split(treap *act, int key, treap*&left, treap*&right)
{
if(act==nullptr)
{
left=right=nullptr;
update(act);
return ;
}
if(key<act->val)
{
split(act->left,key,left,act->left);
right=act;
update(act);
return ;
}
split(act->right,key,act->right,right);
left=act;
update(act);
return ;
}
void merg(treap *&act,treap *left, treap *right)
{
if(left==nullptr || right==nullptr)
{
if(left==nullptr)
act=right;
else
act=left;
update(act);
return ;
}
if(left->pri>right->pri)
{
merg(left->right,left->right,right);
act=left;
update(act);
return ;
}
merg(right->left,left,right->left);
act=right;
update(act);
}
void inser(treap *&act,treap *elem)
{
treap *left,*right;
split(act,elem->val,left,right);
merg(left,left,elem);
merg(act,left,right);
}
void dele(treap *&act,treap *elem)
{
treap *left,*right,*temp;
split(act,elem->val,left,right);
split(act,elem->val-1,left,temp);
merg (act,left,right);//posibil sa nu fie bine
}
bool cauta(treap *&act,treap *elem)
{
int ok=1;
treap *left,*right,*temp;
split(act,elem->val,left,right);
split(act,elem->val-1,left,temp);
if(temp==nullptr)
ok=0;
merg(act,left,temp);
merg(act,left,right);
return ok;
}
int main()
{
treap *elem;
int x;
char s[100];
ios_base::sync_with_stdio(false);
freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
while(cin>>s)
{
if(s[0]=='I')
{
cin>>x;
elem=new treap(x);
if(cauta(root,elem))continue;
if(root==nullptr)
{
root=elem;
}
else
inser(root,elem);
continue;
}
if(s[0]=='S')
{
cin>>x;
elem=new treap(x);
x=cauta(root,elem);
if(x==0)
{
cout<<-1<<'\n';
continue;
}
dele(root,elem);
continue;
}
if(s[0]=='C')
{
cin>>x;
elem=new treap(x);
x=cauta(root,elem);
cout<<x<<'\n';
continue;
}
if(root==nullptr || root->ansma==0)
{
cout<<-1<<'\n';
continue;
}
if(s[1]=='A')
cout<<root->ansma<<'\n';
else
cout<<root->ansmi<<'\n';
}
return 0;
}