#include <bits/stdc++.h>
using namespace std;
struct Node {
Node *l = 0, *r = 0;
int val, g;
int mi, ma;
int mindif;
int cnt;
Node(int val) : val(val), mi(val), ma(val), mindif(1e9), cnt(1), g(rand()) {}
void recheck() {
cnt = 1;
mindif = 1e9;
mi = ma = val;
if(l) {
mi = min(mi, l->mi);
ma = max(ma, l->ma);
mindif = min(mindif, val - l->ma);
mindif = min(mindif, l->mindif);
cnt += l->cnt;
}
if(r) {
mi = min(mi, r->mi);
ma = max(ma, r->ma);
mindif = min(mindif, r->mi - val);
mindif = min(mindif, r->mindif);
cnt += r->cnt;
}
}
};
pair< Node*, Node* > split(Node* n, int k) {
if(!n) return {0, 0};
if(n->val >= k) {
auto pa = split(n->l, k);
n -> l = pa.second;
n -> recheck();
return make_pair(pa.first, n);
} else {
auto pa = split(n->r, k);
n -> r = pa.first;
n -> recheck();
return make_pair(n, pa.second);
}
}
Node* join(Node* l, Node* r) {
if(!l) return r;
if(!r) return l;
if(l -> g > r -> g) {
l -> r = join(l->r, r);
l -> recheck();
return l;
} else {
r -> l = join(l, r->l);
r -> recheck();
return r;
}
}
Node* ins(Node *t, Node *n) {
auto pa = split(t, n->val);
return join(join(pa.first, n), pa.second);
}
Node* ers(Node *t, int pos) {
auto pa = split(t, pos);
auto u = split(pa.second, pos + 1);
if(u.first) delete(u.first);
return join(pa.first, u.second);
}
bool search(Node *t, int pos) {
if(!t) return false;
if(t->val == pos) return true;
if(t->val > pos) return search(t->l, pos);
return search(t->r, pos);
}
int main() {
#ifdef BLAT
freopen("input", "r", stdin);
#define f cin
#define g cout
#else
ifstream f("zeap.in");
ofstream g("zeap.out");
#endif
Node* root = 0;
string s;
int x;
int y = 0;
while(f >> s) {
if(s == "I") {
f >> x;
if(!search(root, x)) root = ins(root, new Node(x));
}
if(s == "C") {
f >> x;
g << search(root, x) << '\n';
}
if(s == "S") {
f >> x;
if(!search(root, x)) g << "-1\n";
else root = ers(root, x);
}
if(s == "MAX") {
if(root->cnt < 2) g << "-1\n";
else g << root->ma - root->mi << '\n';
}
if(s == "MIN") {
if(root -> cnt < 2) g << "-1\n";
else g << root->mindif << '\n';
}
}
}