STL操作
//#pragma GCC optimize(2)
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <ctime>
#include <vector>
#include <fstream>
#include <list>
#include <iomanip>
#include <numeric>
using namespace std;
typedef long long ll;
const int MAXN = 1e6 + 10;
stack <int> ST;
multiset <int> MS;
int main()
{
//ios::sync_with_stdio(false);
//cin.tie(0); cout.tie(0);
int n, x, y;
cin>>n;
while(n--)
{
cin>>x;
if(x == 0)
{
cin>>y;
ST.push(y);
MS.insert(-y);
}
else if(x == 1)
{
int y = ST.top();
ST.pop();
MS.erase(MS.find(-y));
}
else if(x == 2)
{
y = *MS.begin();
cout<<-y<<endl;
}
}
return 0;
}