#include<stdio.h>
#include<algorithm>
#include<cstring>
#include<vector>
#define pb push_back
#define mp make_pair
#define v first
#define index second
#define maxn 300005
#define mod 3000013
#define aitmax 1<<21
#define inf 0x3f3f3f3f
using namespace std;
struct question{int type,val,key;} q[maxn],sorted[maxn];
struct segment_tree{int minn,maxx,diff;} ait[aitmax];
int ind,nr,nrs,nri;
int pos[maxn];
bool inside[maxn];
vector < pair<int,int> > norm[mod];
char s[20];
int hash_key(int k)
{
return k%mod;
}
int normalize(int val)
{
int k=hash_key(val);
for(unsigned int i=0;i<norm[k].size();i++)
if(norm[k][i].v==val)
return norm[k][i].index;
norm[k].pb(mp(val,++ind));
return ind;
}
int number()
{
int val=0;
for(int i=2;s[i]>='0' && s[i]<='9';i++) val=val*10+s[i]-'0';
return val;
}
void add(int t,int num,int k)
{
q[nr].type=t;
q[nr].val=num;
q[nr].key=k;
}
void read()
{
int valc;
while(!feof(stdin))
{
memset(s,'n',sizeof(s));
fgets(s,sizeof(s),stdin);
if(s[0]=='I')
{
nr++; valc=number(); add(1,valc,normalize(valc));
sorted[++nrs]=q[nr];
continue;
}
if(s[0]=='S') {nr++; valc=number(); add(2,valc,normalize(valc)); continue;}
if(s[0]=='C') {nr++; valc=number(); add(3,valc,normalize(valc)); continue;}
if(s[0]=='M' && s[1]=='A') {q[++nr].type=4; continue;}
if(s[0]=='M' && s[1]=='I') {q[++nr].type=5; continue;}
scanf("\n");
}
}
int cmp(question i,question j){
return i.val<j.val;
}
void build(int k,int left,int right)
{
ait[k].minn=inf; ait[k].maxx=-inf; ait[k].diff=inf;
if(left==right) return;
int mid=(left+right)/2;
build(2*k,left,mid);
build(2*k+1,mid+1,right);
}
void preproc()
{
int i;
sort(sorted+1,sorted+nrs+1,cmp);
sorted[0].val=-1;
for(i=1;i<=nrs;i++)
if(sorted[i].val!=sorted[i-1].val)
sorted[++nri]=sorted[i];
for(i=1;i<=nri;i++) pos[sorted[i].key]=i;
build(1,1,nri);
}
void update(int k,int left,int right,int poss,int value)
{
if(left==right)
{
ait[k].minn=value;
ait[k].maxx=value;
if(!value) ait[k].minn=inf,ait[k].maxx=-inf;
return ;
}
int mid=(left+right)/2;
if(poss<=mid) update(2*k,left,mid,poss,value);
else update(2*k+1,mid+1,right,poss,value);
ait[k].minn=min(ait[2*k].minn,ait[2*k+1].minn);
ait[k].maxx=max(ait[2*k].maxx,ait[2*k+1].maxx);
ait[k].diff=min(ait[2*k].diff,ait[2*k+1].diff);
ait[k].diff=min(ait[k].diff,ait[2*k+1].minn-ait[2*k].maxx);
}
void solve()
{
for(int i=1;i<=nr;i++)
{
if(q[i].type==1)
{
if(!inside[q[i].key]) update(1,1,nri,pos[q[i].key],q[i].val);
inside[q[i].key]=true;
continue;
}
if(q[i].type==2)
{
if(!inside[q[i].key]) printf("-1\n");
else
update(1,1,nri,pos[q[i].key],0),inside[q[i].key]=false;
continue;
}
if(q[i].type==3)
{
if(inside[q[i].key]) printf("1\n");
else printf("0\n");
continue;
}
if(q[i].type==4)
{
if(ait[1].minn>=ait[1].maxx) printf("-1\n");
else printf("%d\n",ait[1].maxx-ait[1].minn);
continue;
}
if(q[i].type==5)
{
if(ait[1].minn>=ait[1].maxx) printf("-1\n");
else printf("%d\n",ait[1].diff);
}
}
}
int main()
{
freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
read();
preproc();
solve();
fclose(stdin);
fclose(stdout);
return 0;
}