#include<fstream>
#include<cstdlib>
#include<ctime>
#include<cstring>
#define INF 2000000000
using namespace std;
ifstream fin("zeap.in");
ofstream fout("zeap.out");
char s[500];
int nodes, ok, n;
struct treap{
int value;
int priority;
int minim;
int maxim;
int difmin;
treap *st;
treap *dr;
treap( int value, int priority, int minim, int maxim, int difmin, treap *st, treap *dr ){
this->value = value;
this->priority = priority;
this->minim = minim;
this->maxim = maxim;
this->difmin = difmin;
this->st = st;
this->dr = dr;
}
} *r, *nill;
void update( treap *r ){
r->minim = min( min( r->st->minim, r->dr->minim ), r->value );
r->maxim = max( max( r->st->maxim, r->dr->maxim ), r->value );
r->difmin = min( min( r->st->difmin, r->dr->difmin ), min( r->value - r->st->maxim, r->dr->minim - r->value ) );
}
void rotate_st( treap * &r ){
treap *aux = r->dr;
r->dr = aux->st;
aux->st = r;
r = aux;
update( r->st );
update(r);
return;
}
void rotate_dr( treap * &r ){
treap *aux = r->st;
r->st = aux->dr;
aux->dr = r;
r = aux;
update( r->dr );
update(r);
return;
}
void balance( treap * &r ){
if( r->st != NULL && r->priority < r->st->priority ){
rotate_dr(r);
}else{
if( r->dr != NULL && r->priority < r->dr->priority ){
rotate_st(r);
}
}
return;
}
void insertN( treap * &r, int val, int prt ){
if( r == nill ){
r = new treap( val, prt, INF, -INF, INF, nill, nill );
nodes++;
}else{
if( val > r->value ){
insertN( r->dr, val, prt );
}else{
if( val < r->value ){
insertN( r->st, val, prt );
}
}
}
balance(r);
update(r);
}
void removeN( treap * &r, int val ){
if( r != nill ){
if( val > r->value ){
removeN( r->dr, val );
}else{
if( val < r->value ){
removeN( r->st, val );
}else{
if( r->st == nill && r->dr == nill ){
delete r;
r = nill;
nodes--;
ok = 1;
}else{
if( r->st->priority > r->dr->priority ){
rotate_dr(r);
}else{
rotate_st(r);
}
removeN( r, val );
}
}
}
if( r != nill )
update(r);
}
}
int searchN( treap *r, int val ){
if( r == nill ){
return 0;
}else{
if( r->value < val ){
return searchN( r->dr, val );
}else{
if( r->value > val ){
return searchN( r->st, val );
}else{
return 1;
}
}
}
}
int main(){
r = nill = new treap( 0, 0, INF, -INF, INF, NULL, NULL );
nodes = 0;
srand( time(0) );
while( fin.get( s, 100 ) ){
n = strlen(s);
int i;
for( i = 0; i < n; i++ ){
if( s[i] == ' ' ){
break;
}
}
i++;
int number = 0;
for( ; i < n; i++ ){
number = number * 10 + ( s[i] - '0' );
}
if( s[0] == 'I' ){
insertN( r, number, rand() );
}
if( s[0] == 'S' ){
ok = 0;
removeN( r, number );
if( ok == 0 ) fout << "-1\n";
}
if( s[0] == 'C' ){
fout << searchN( r, number ) << "\n";
}
if( s[1] == 'A' ){
if( nodes >= 2 ){
fout << r->maxim - r->minim << "\n";
}else{
fout << "-1\n";
}
}
if( s[1] == 'I' ){
if( nodes >= 2 ){
fout << r->difmin << "\n";
}else{
fout << "-1\n";
}
}
fin.get();
}
return 0;
}