#include <iostream>
#include <stdio.h>
using namespace std;
const int N =100010;
int a[N], b[N],hi[N],num,idx;
//b[idx]记录第idx个元素的序号
//hi[]存储idx,当前元素是第几个元素,hi[序号]=idx(第几个元素)
void hswap(int t, int u){
swap(b[hi[t]], b[hi[u]]);//交换当前序号
swap(hi[t], hi[u]);//交换k的值
swap(a[t],a[u]);
}
void up(int u){
while(u / 2 && a[u] < a[u / 2]){
hswap(u, u/2);
u = u / 2;
}
}
void down(int u){
int t = u;
if(u * 2 <= num && a[t] > a[u * 2]) t = u * 2;
if(u * 2 + 1 <= num && a[t] > a[u * 2 + 1]) t = u * 2 + 1;
if(u != t){
hswap(t , u);
down(t);
}
}
int main(){
int n,x,k;
// idx=0;
cin >> n;
while(n--){
char op[5];
cin >> op;
if(op[0] == 'I'){
cin >> x;
idx++;
num++;
b[idx] = num;
hi[num] = idx;
a[num] = x;
up(num);
}else if(op[0] == 'P'){
cout << a[1] << endl;
}else if(op[1] == 'M'){
hswap(1, num);//不只是交换数值,还交换了下标和序号等信息
num--;
down(1);
}else if(op[0] == 'D'){
cin >> k;
k = b[k];//k是临时变量,不会因为b[]的变化而变化
hswap(k, num);
num--;
up(k);
down(k);
}else if(op[0] == 'C'){
cin >> k >> x;
k = b[k];//k是临时变量,不会因为b[]的变化而变化
a[k] = x;
up(k);
down(k);
}
}
return 0;
}