#include <cstdio>
#include <set>
#include <ext/hash_map>
using namespace std;
using namespace __gnu_cxx;
#define mp make_pair
#define t first
#define n second
#define common\
int nst = (nod << 1), ndr = (nst | 1), mij = (li + lf) >> 1
const int MAX_N = 300005;
const int INF = 0x3f3f3f3f;
int N, T, V[MAX_N], A[2*MAX_N], val, poz;
hash_map <int, int> H;
set <int> S;
pair <int, int> Q[MAX_N];
void normalizare()
{
sort(V+1, V+N+1);
for(int i = 1; i <= N; ++i)
if(H[V[i]] == 0)
H[V[i]] = i;
}
void update(int nod, int li, int lf)
{
if(li == lf)
{
A[nod] = val;
return;
}
common;
if(poz <= mij) update(nst, li, mij);
else update(ndr, mij+1, lf);
A[nod] = INF;
A[nod] = min(A[nst], A[ndr]);
}
void insert(int x)
{
if(S.find(x) != S.end()) return;
set<int>::iterator it1 = S.upper_bound(x);
if(it1 != S.end())
{
poz = H[*it1];
val = *it1 - x;
update(1, 1, N);
}
if(it1 != S.begin())
{
poz = H[x];
val = x - *(--it1);
update(1, 1, N);
}
S.insert(x);
}
void erase(int x)
{
if(S.find(x) == S.end())
{
printf("-1\n");
return;
}
val = INF;
poz = H[x];
update(1, 1, N);
S.erase(x);
set<int>::iterator it1 = S.upper_bound(x), it2 = it1;
--it2;
if(it1 == S.begin())
if(it1 != S.end())
{
val = INF;
poz = H[*it1];
update(1, 1, N);
}
if(it1 != S.begin() && it1 != S.end())
{
val = *it1 - *it2;
poz = H[*it1];
update(1, 1, N);
}
if(it1 == S.end())
if(S.size() == 1)
{
val = INF;
poz = H[*it2];
update(1, 1, N);
}
}
void find(int x)
{
printf("%d\n", (S.find(x) != S.end()));
}
void find_max()
{
if(S.size() < 2)
{
printf("-1\n");
return;
}
set<int>::iterator it1 = S.begin();
set<int>::reverse_iterator it2 = S.rbegin();
printf("%d\n", *it2 - *it1);
}
void find_min()
{
if(S.size() < 2)
{
printf("-1\n");
return;
}
printf("%d\n", A[1]);
}
int main()
{
freopen("zeap.in","rt",stdin);
freopen("zeap.out","wt",stdout);
char s[10];
int nr = 0;
while(scanf("%s", s) != EOF)
if(s[0] == 'I')
{
scanf("%d", &nr);
Q[++T] = mp(1, nr);
V[++N] = nr;
}
else if(s[0] == 'S')
{
scanf("%d", &nr);
Q[++T] = mp(2, nr);
}
else if(s[0] == 'C')
{
scanf("%d", &nr);
Q[++T] = mp(3, nr);
}
else if(s[0] == 'M' && s[1] == 'A')
Q[++T] = mp(4, 0);
else
Q[++T] = mp(5, 0);
normalizare();
memset(A, INF, sizeof A);
for(int i = 1; i <= T; ++i)
if(Q[i].t == 1)
insert(Q[i].n);
else if(Q[i].t == 2)
erase(Q[i].n);
else if(Q[i].t == 3)
find(Q[i].n);
else if(Q[i].t == 4)
find_max();
else
find_min();
}