#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
typedef struct Treap {
int key, prio, mn, mx, dif;
Treap *l, *r;
Treap(int x) { key = x, prio = rand() + 1, mn = x, mx = x, dif = INF, l = r = 0; }
void update() {
if (this == 0) return;
mn = mx = key, dif = INF;
if (l) mn = l->mn, dif = min({dif, l->dif, key - l->mx});
if (r) mx = r->mx, dif = min({dif, r->dif, r->mn - key});
}
} *T;
T Merge (T l, T r) {
if (!l) return r;
if (!r) return l;
l->update(), r->update();
if (l->prio >= r->prio) {
l->r = Merge(l->r,r);
l->update();
return l;
} else {
r->l = Merge(l,r->l);
r->update();
return r;
}
}
void Split(T n, int x, T &l, T &r) {
l = r = 0;
if (!n) return;
if (n->key < x) {
Split(n->r,x,n->r,r);
l = n;
} else {
Split(n->l,x,l,n->l);
r = n;
}
if (l) l->update();
if (r) r->update();
}
int main() {
freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
T root = 0;
string s;
while (cin >> s) {
if (s.size() > 1) {
if (!root || root->mx == root->mn) cout << "-1\n";
else if (s == "MAX") cout << root->mx - root->mn << '\n';
else cout << root->dif << '\n';
} else {
int x;
cin >> x;
T l, m, r;
Split(root,x,l,m), Split(m,x+1,m,r);
if (s == "I") root = Merge(Merge(l,new Treap(x)),r);
else if (s == "S") {
if (!m) cout << "-1\n";
delete(m);
root = Merge(l,r);
} else {
cout << (m != 0) << '\n';
root = Merge(Merge(l,m),r);
}
}
}
}