#include <fstream>
#include <set>
#include <iostream>
#include <string>
#include <cmath>
#include <unordered_map>
using namespace std;
set<long long >zeap;
set<long long> diferente;
unordered_map<long long, long long >v;
int main()
{
ifstream f("zeap.in");
ofstream g("zeap.out");
string operatie;
long long nr;
set<long long >::iterator curent,previos,nextp,l;
long long i = 0;
while (f>>operatie)
{
if(operatie == "I") {
f >> nr;
if (zeap.find(nr) != zeap.end())
continue;
else { zeap.insert(nr); i++;}
if(zeap.size()>=2) {
curent = zeap.find(nr);
previos = curent;
nextp = curent;
nextp++;previos--;
l = zeap.end();
l--;
if(curent != zeap.begin() && curent != l) {
diferente.insert(abs(*curent - *nextp));
diferente.insert(abs(*curent - *previos));
v[abs(*curent - *nextp)]++;v[abs(*curent - *previos)]++;
if(v[abs(*nextp-*previos)] == 1) {
diferente.erase(abs(*nextp - *previos));
v[abs(*nextp - *previos)] = 0;
}
else v[abs(*nextp-*previos)]--;
}
else if(curent != zeap.begin()) {
diferente.insert(abs(*curent - *previos));
v[abs(*curent - *previos)]++;}
else if(curent != l) {
diferente.insert(abs(*curent - *nextp));
v[abs(*curent - *nextp)]++;}
}
} else if(operatie == "C")
{
f>>nr;
if(zeap.find(nr) != zeap.end())
g<<1<<'\n';
else
g<<0<<'\n';
} else if(operatie == "S")
{
f>>nr;
if(zeap.find(nr) != zeap.end()) {
curent = zeap.find(nr);
previos = curent;
nextp = curent;
previos--;
nextp ++;
l = zeap.end();
l--;
if(curent != zeap.begin() && curent != l) {
if(v[abs(*curent - *nextp)] == 1) {
diferente.erase(abs(*curent - *nextp));
v[abs(*curent - *nextp)]=0;}
else v[abs(*curent - *nextp)]--;
if(v[abs(*curent - *previos)]== 1){
diferente.erase(abs(*curent - *previos));
v[abs(*curent - *previos)] = 0;}
else v[abs(*curent - *previos)]--;
diferente.insert(abs(*nextp-*previos));
v[abs(*nextp-*previos)]++;
}
else if(curent != zeap.begin()) {
if (v[abs(*curent - *previos)] == 1) {
diferente.erase(abs(*curent - *previos));
v[abs(*curent - *previos)] = 0;
}
else v[abs(*curent - *previos)]--;
}
else if(curent != l) {
if (v[abs(*curent - *nextp)] == 1) {
diferente.erase(abs(*curent - *nextp));
v[abs(*curent - *nextp)] = 0;
}
else v[abs(*curent - *nextp)]--;
}
zeap.erase(nr);
}
else
g<<-1<<'\n';
} else if(operatie == "MAX") {
if (zeap.size() < 2)
g << -1 << '\n';
else {
l = zeap.end();
l--;
curent = zeap.begin();
g<<abs(*l-*curent)<<'\n';
}
} else if(operatie == "MIN") {
if(zeap.size()>=2) {
long long minim = *diferente.begin();
g << minim << '\n';
} else g<<-1<<'\n';
}
}
f.close();g.close();
return 0;
}