#include <cstdio>
#include <set>
#include <ext/hash_map>
#include <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[3*MAX_N], val, poz;
hash_map <int, int> H;
set <int> S, Sp;
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, ndr);
A[nod] = INF;
A[nod] = min(A[nst], A[ndr]);
}
void insert(int x)
{
if(S.find(x) != S.end()) return;
/* for(set<int>::iterator it = S.begin(); it != S.end(); ++it)
fprintf(stderr,"%d ", *it);
fprintf(stderr, "\n");*/
//S.insert(x);
set<int>::iterator it1 = S.upper_bound(x), it2 = Sp.upper_bound(-x);
//fprintf(stderr, "%d %d\n", *it1, *it2);
if(it2 != Sp.end())
{
poz = H[x];
val = x + *it2;
// fprintf(stderr, "%d %d %d\n", x, poz, -*it2);
update(1, 1, N);
}
if(it1 != S.end())
{
poz = H[*it1];
val = *it1 - x;
update(1, 1, N);
}
S.insert(x);
Sp.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);
Sp.erase(-x);
set<int>::iterator it1 = S.upper_bound(x), it2 = Sp.upper_bound(-x);
if(it1 == S.end())
if(S.size() == 1)
{
val = INF;
poz = H[-*it2];
update(1, 1, N);
}
if(it2 == Sp.end())
if(it1 != S.end())
{
val = INF;
poz = H[*it1];
update(1, 1, N);
}
if(it2 != Sp.end())
if(it1 != S.end())
{
// fprintf(stderr, "%d %d %d\n", *it1, -*it2, H[-*it2]);
val = *it2 + *it1;
poz = H[*it1];
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);
/* for(int i = 1; i <= T; ++i)
printf("%d %d\n", Q[i].t, Q[i].n);*/
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();*/
}