#include <bits/stdc++.h>
using namespace std;
ifstream fin("zeap.in");
ofstream fout("zeap.out");
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
char c;
int x;
struct treap
{
int k, p, maxx, minn, mind;
treap *l, *r;
treap(int x)
{
k=x;
p=rng();
minn = maxx = x;
mind=INT_MAX;
l=NULL;
r=NULL;
}
}*rad;
void upd(treap *rt)
{
if(!rt)
return;
rt->maxx = rt->k;
rt->minn = rt->k;
rt->mind = INT_MAX;
if(rt->r)
{
rt->maxx = rt->r->maxx;
rt->mind = min(rt->mind, min(rt->r->mind, rt->r->minn - rt->k));
}
if(rt->l)
{
rt->minn = rt->l->minn;
rt->mind = min(rt->mind, min(rt->l->mind, rt->k - rt->l->maxx));
}
}
void split(treap *rt, int key, treap *&l, treap *&r)
{
if(!rt)
{
l=r=NULL;
return;
}
if(key < rt->k)
{
split(rt->l, key, l, rt->l);
r=rt;
}
else
{
split(rt->r, key, rt->r, r);
l=rt;
}
upd(rt);
}
void merg(treap *&rt, treap *l, treap *r)
{
if(!l)
{
rt=r;
return;
}
if(!r)
{
rt=l;
return;
}
if(l->p > r->p)
{
merg(l->r, l->r, r);
rt=l;
}
else
{
merg(r->l, l, r->l);
rt=r;
}
upd(rt);
}
void ins(treap *&rt, treap *elem)
{
treap *l, *r;
split(rt, elem->k, l, r);
merg(l, l, elem);
merg(rt, l, r);
}
void del(treap *&rt, int key)
{
if(key == rt->k)
{
treap *aux = rt;
merg(rt, rt->l, rt->r);
delete aux;
}
else if(key<rt->k)
del(rt->l, key);
else del(rt->r, key);
upd(rt);
}
bool caut(treap *rt, int key)
{
if(!rt)
return 0;
if(key==rt->k)
return 1;
if(key<rt->k)
return caut(rt->l, key);
return caut(rt->r, key);
}
int main()
{
treap *rt=NULL;
while(fin >> c)
{
if(c=='I')
{
fin >> x;
if(!caut(rt, x))
{
treap *t = new treap(x);
ins(rt, t);
}
}
else if(c=='S')
{
fin >> x;
if(caut(rt, x))
del(rt, x);
else fout << -1 << '\n';
}
else if(c=='C')
{
fin >> x;
fout << caut(rt, x) << '\n';
}
else
{
char c1, c2;
fin >> c1 >> c2;
if(rt==NULL || (rt->maxx==rt->minn))
fout << -1 << '\n';
else
{
if(c1=='A')
fout << rt->maxx - rt->minn << '\n';
else fout << rt->mind << '\n';
}
}
}
return 0;
}