#include <cstdio>
#include <stdlib.h>
#include <algorithm>
#include <ctime>
using namespace std;
#define Lmax 300010
#define Pmax (1 << 25)
#define INF 1 << 30
struct treap {
int key, priority, min, max, dif_min;
treap *left, *right;
treap (int key, int priority, int min, int max, int dif_min, treap *left, treap *right) {
this->key = key;
this->priority = priority;
this->min = min;
this->max = max;
this->dif_min = dif_min;
this->left = left;
this->right = right;
}
} *rad, *nil;
int nr, nr_nod, pr;
void rot_left (treap* &nod) {
treap *fiu = nod->left;
nod->left = fiu->right; fiu->right = nod;
nod = fiu;
}
void rot_right (treap* &nod) {
treap* fiu = nod->right;
nod->right = fiu->left; fiu->left = nod;
nod = fiu;
}
void param (treap* &nod) {
nod->min = min (nod->key, nod->left->min);
nod->max = max (nod->key, nod->right->max);
nod->dif_min = min ( min(nod->left->dif_min, nod->right->dif_min), min ( abs (nod->key - nod->left->max), abs (nod->key - nod->right->min) ) );
}
void balance (treap* &nod) {
if (nod->left->priority > nod->priority)
rot_left (nod);
if (nod->right->priority > nod->priority)
rot_right (nod);
param (nod);
}
void insert (treap* &nod, int key, int priority) {
if (nod == nil) {
nod = new treap (key, priority, key, key, INF, nil, nil);
nr_nod++;
return ;
}
if (key == nod->key) return;
if (key < nod->key)
insert (nod->left, key, priority);
else
insert (nod->right, key, priority);
balance (nod);
}
void erase (treap *&nod, int key) {
if (nod == nil)
return ;
if (key < nod->key)
erase (nod->left, key);
else {
if (key > nod->key)
erase (nod->right, key);
else {
if (nod->left == nil && nod->right == nil)
delete nod, nod = nil;
else {
if (nod->left->priority > nod->right->priority)
rot_left (nod);
else
rot_right (nod);
erase (nod, key);
}
}
}
if (nod != nil)
param (nod);
}
int find (treap* &nod, int key) {
if (nod == nil)
return 0;
if (key == nod->key) return 1;
if (key < nod->key)
return find (nod->left, key);
else
return find (nod->right, key);
}
int main () {
freopen ("zeap.in", "r", stdin);
freopen ("zeap.out", "w", stdout);
srand (time (0));
rad = nil = new treap(0, 0, INF, -INF, INF, NULL, NULL);
char s[1 << 5]; scanf ("%s", s);
while (!feof (stdin)) {
if (s[0] == 'I') {
scanf ("%d", &nr);
pr = rand () % Pmax + 1;
insert (rad, nr, pr);
}
if (s[0] == 'C') {
scanf ("%d", &nr);
printf ("%d\n", find (rad, nr));
}
if (s[0] == 'S') {
scanf ("%d", &nr);
if (!find (rad, nr))
printf ("-1\n");
else
erase (rad, nr), nr_nod--;
}
if (s[0] == 'M' && s[1] == 'A') {
if (nr_nod < 2) printf ("-1\n");
else {
printf ("%d\n", rad->max - rad->min);
}
}
if (s[0] == 'M' && s[1] == 'I') {
if (nr_nod < 2) printf ("-1\n");
else {
printf ("%d\n", rad->dif_min);
}
}
scanf ("%s", s);
}
return 0;
}