#include <iostream>
#include <cstring>
#include <stack>
using namespace std;
stack<int> a_stack;
stack<int> min_stack;
void push(int n)
{
a_stack.push(n);
if(min_stack.size()==0) min_stack.push(n);
else
{
int top = min_stack.top();
if(n<top) min_stack.push(n);
else min_stack.push(top);
}
}
int minEle()
{
if(min_stack.size()>0) return min_stack.top();
else return -1;
}
int pop()
{
if(a_stack.size()>0 && min_stack.size()>0)
{
int n = a_stack.top();
a_stack.pop();
min_stack.pop();
return n;
}
else return -1;
}
int main()
{
int n,val;
for(;;)
{
cin>>n;
if(n==1)
{
cin>>val;
push(val);
}
else if(n==2)
{
cout<<minEle()<<endl;
}
else cout<<pop()<<endl;
}
return 0;
}