#include<iostream>
#include<stack>
using namespace std;
int main(){
int N;
int a;
cin>>N;
int temp;
stack<int> myStack,max;
for(int i=0;i<N;i++)
{
cin>>temp;
if(temp==0){//如果是格式0
cin>>temp;
myStack.push(temp);//将重量存入myStack栈中
if(max.empty()){//如果max栈为空,则将重量压入
max.push(temp);
}else if(temp>=max.top()){//如果重量>=max栈顶,则将数据也压入
max.push(temp);
}
}else if(temp==1&&!myStack.empty()){//如果是格式1且myStack栈不为空,则要将数据出栈
if(myStack.top()==max.top()){myStack.pop();max.pop();}//如果max栈和myStack栈顶相同,则都弹出
else{myStack.pop();}//否则,只弹出myStack栈
}else{//如果是格式2
if(myStack.empty()){cout<<0<<endl;continue;}//如果myStack为空输出0
cout<<max.top()<<endl;//不为空输出max栈顶
}
}
return 0;
}