#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int NM = 1200000;
const int NUM = 300000;
const int INF = 0x3f3f3f3f;
const int MOD = 666013;
int mx[NM], mn[NM], Dm[NM];
int st[NUM+5], K, Val1, Val2, poz, PPZ;
char s[20];
typedef struct lnod{
int vf,poz;
lnod *next;
}*Nod;
Nod h[MOD];
void add(Nod &q, int vf, int poz){
Nod p = new lnod;
p->vf = vf;
p->poz = poz;
p->next = q;
q = p;
}
bool find(int val){
for(Nod p = h[val % MOD]; p; p=p->next)
if(p->vf == val) return 1;
return 0;
}
int deleter(int val){
int x = val % MOD;
Nod prec;
for(Nod p = h[x],prec=0; p; prec=p, p=p->next)
if(p->vf == val)
{
if(h[x] == p) h[x] = h[x]->next;
else
if(p->next == NULL) prec->next = NULL;
else
prec->next = p -> next;
return p->poz;
}
return 0;
}
int abs2(int x) { return (x<0) ? -x : x; }
void build(int nod, int l, int r){
if(l == r)
{
mn[nod] = Dm[nod] = INF;
mx[nod] = -INF;
return ;
}
int div = (l+r) / 2;
build(2*nod,l,div);
build(2*nod+1,div+1,r);
Dm[nod] = min(Dm[2*nod], Dm[2*nod+1]);
if(mx[2*nod] != -INF && mx[2*nod+1] != -INF) Dm[nod] = min(Dm[nod], abs2(mx[2*nod] - mx[2*nod+1]));
if(mn[2*nod] != INF && mn[2*nod+1] != INF) Dm[nod] = min(Dm[nod], abs2(mn[2*nod] - mn[2*nod+1]));
mx[nod] = max(mx[2*nod], mx[2*nod+1]);
mn[nod] = min(mn[2*nod], mn[2*nod+1]);
}
void update(int nod, int l, int r){
if(l == r)
{
mn[nod] = Val1;
mx[nod] = Val2;
return ;
}
int div = (l+r) / 2;
if(poz <= div) update(2*nod, l, div);
else update(2*nod+1, div+1, r);
Dm[nod] = min(Dm[2*nod], Dm[2*nod+1]);
if(mx[2*nod] != -INF && mx[2*nod+1] != -INF) Dm[nod] = min(Dm[nod], abs2(mx[2*nod] - mx[2*nod+1]));
if(mn[2*nod] != INF && mn[2*nod+1] != INF) Dm[nod] = min(Dm[nod], abs2(mn[2*nod] - mn[2*nod+1]));
mx[nod] = max(mx[2*nod], mx[2*nod+1]);
mn[nod] = min(mn[2*nod], mn[2*nod+1]);
}
int main(){
freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
int i,l,x=0,nr=0;
build(1,1,NUM);
for(i=NUM;i>0;--i) st[NUM-i+1] = i;
K = NUM;
while(gets(s))
{
l = strlen(s);
if(s[0] == 'I' || s[0] == 'S' || s[0] == 'C')
{
i = 2;
x = 0;
while(i<l && s[i] >='0' && s[i]<='9') x=(x*10)+(s[i++]-'0');
}
if(s[0] == 'I')
{
if(!find(x))
{
add(h[x%MOD],x,st[K]);
Val1 = Val2 = x;
poz = st[K];
update(1,1,NUM);
-- K;
nr ++;
}
}
else
if(s[0] == 'S')
{
if(find(x))
{
PPZ = deleter(x);
st[++K] = PPZ;
Val1 = INF;
Val2 = - INF;
poz = PPZ;
update(1,1,NUM);
nr --;
}
else
printf("-1\n");
}
else
if(s[0] == 'C')
{
if(find(x)) printf("1\n");
else printf("0\n");
}
else
if(s[1] == 'A')
{
if(nr > 1)
{
printf("%d\n",mx[1] - mn[1]);
}
else printf("-1\n");
}
else
if(s[1] == 'I')
{
if(nr > 1)
{
printf("%d\n",Dm[1]);
}
else printf("-1\n");
}
memset(s,0,sizeof(s));
}
return 0;
}