#include<bits/stdc++.h>
const int N=300007;
char buf[N*35],*ptr=buf;
int _(){
int x=0;
while(*ptr<48)++ptr;
while(*ptr>47)x=x*10+*ptr++-48;
return x;
}
int n,ts[N],qs[N][3],tp=0,vs[N];
int _x,_a,_p;
int min(int a,int b){return a<b?a:b;}
struct node{
node*lc,*rc;
int L,R,M;
int mn,a;
void add(int x){
mn+=x,a+=x;
}
void dn(){
if(a){
lc->add(a);
rc->add(a);
a=0;
}
}
void up(){
mn=min(lc->mn,rc->mn);
}
void add(){
if(_x<=L)return add(_a);
dn();
if(_x<=M)lc->add();
rc->add();
up();
}
int at(){
if(L==R)return mn;
dn();
return (_x<=M?lc:rc)->at();
}
bool find(){
if(mn>=_a)return 0;
if(L==R)return _p=R+1,1;
dn();
if(_x>M&&rc->find())return 1;
return lc->find();
}
}ns[N*2],*np=ns,*rt;
node*build(int L,int R){
node*w=np++;
w->L=L,w->R=R;
if(L<R){
int M=w->M=L+R>>1;
w->lc=build(L,M);
w->rc=build(M+1,R);
}
return w;
}
int $(int x){
return std::lower_bound(ts,ts+tp,x)-ts;
}
int main(){
fread(buf,1,sizeof(buf),stdin);
n=_();
ts[tp++]=-10;
for(int i=1;i<=n;++i){
qs[i][0]=_();
qs[i][1]=_();
if(qs[i][0]==71626)ts[tp++]=qs[i][2]=_();
else ts[tp++]=qs[i][1];
}
std::sort(ts,ts+tp);
rt=build(0,tp-1);
vs[0]=-1;
for(int i=1;i<=n;++i){
if(qs[i][0]==71626){
_x=$(qs[i][2]);
vs[_x]=qs[i][1];
_a=1,rt->add();
}else if(qs[i][0]==7094){
_x=$(qs[i][1]);
_a=-1,rt->add();
}else{
_x=$(qs[i][1]);
_a=rt->at();
_p=0;
rt->find();
printf("%d\n",vs[_p]);
}
}
return 0;
}