#include <bits/stdc++.h>
using namespace std;
char s[10];
int k = 0;
set <int> S;
set <pair <int, int> > Min;
inline int maxim(){
if(S.size() < 2) return -1;
return *S.rbegin() - *S.begin();
}
inline int minim(){
if(S.size() < 2) return -1;
return Min.begin()->first;
}
inline int cauta(int x){
if(S.find(x) != S.end()) return 1;
return 0;
}
inline void inserare(int x){
if(cauta(x)) return ;
S.insert(x);
if(S.size() == 1) return ;
set <int> :: iterator it = S.lower_bound(x);
if(it != S.begin()){
set <int> :: iterator it2 = prev(it);
if(next(it) != S.end()){
set <int> :: iterator it3 = next(it);
int val = *it3 - *it2;
set <pair <int, int> > :: iterator it4 = Min.lower_bound({val, 0});
Min.erase(it4);
}
++k;
Min.insert({*it - *it2, k});
}
if(next(it) != S.end()){
set <int> :: iterator it3 = next(it);
++k;
Min.insert({*it3 - *it, k});
}
}
inline void stergere(int x){
if(cauta(x)){
set <int> :: iterator it = S.lower_bound(x);
if(it != S.begin()){
set <int> :: iterator it2 = prev(it);
if(next(it) != S.end()){
set <int> :: iterator it3 = next(it);
++k;
Min.insert({*it3 - *it2, k});
}
int val = *it - *it2;
set <pair <int, int> > :: iterator it4 = Min.lower_bound({val, 0});
Min.erase(it4);
}
if(next(it) != S.end()){
set <int> :: iterator it3 = next(it);
int val = *it3 - *it;
set <pair <int, int> > :: iterator it4 = Min.lower_bound({val, 0});
Min.erase(it4);
}
S.erase(x);
}
else printf("-1\n");
}
int main()
{
freopen("zeap.in", "r", stdin);
freopen("zeap.out", "w", stdout);
int x;
while(!feof(stdin)){
scanf("%s", s);
if(s[0] == 'M'){
scanf("\n");
if(s[1] == 'A') printf("%d\n", maxim());
else printf("%d\n", minim());
}
else{
scanf("%d\n",&x);
if(s[0] == 'I') inserare(x);
if(s[0] == 'S') stergere(x);
if(s[0] == 'C') printf("%d\n", cauta(x));
}
}
return 0;
}