#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define sort(v) sort(v.begin(),v.end())
#define rev(v) reverse(v.begin(),v.end())
#define pb push_back
#define endl "\n"

/*vector<ll>sv;ll ar[1000000+9]= {0};void seiv(){ll n=1000000,i,j;ar[1]=1;for(i=4; i<=n; i+=2)ar[i]=1;for(i=3; i<=n; i+=2){if(ar[i]==0){for(j=i*i; j<=n; j+=i*2)ar[j]=1;}}for(i=2; i<=n; i++){if(ar[i]==0)sv.pb(i);}}*/

int main()
{
    ll t;
//    cin>>t;
//    while(t--)
    {

        ll a,b,c=0,d=0,e=0,i,j,k=0,l=0,x,y;
        set<pair<ll,ll>>st,tt;
        set<pair<ll,ll>>:: iterator it;
        cin>>a;
        for(i=1; i<=a; i++)
        {
            cin>>b;
            if(b==1)
            {
                c++;
                cin>>d;
                st.insert({c,-d});
                tt.insert({-d,c});

            }
            if(b==2){
                pair<ll,ll>p;
                it=st.begin();
                p=*it;
                cout<<p.first<<" ";
                st.erase(it);
                d=p.first;
                p.first=p.second;
                p.second=d;
                it=tt.find(p);
                tt.erase(it);
            }
                if(b==3){
                pair<ll,ll>p;
                it=tt.begin();
                p=*it;
                cout<<p.second<<" ";
                tt.erase(it);
                d=p.first;
                p.first=p.second;
                p.second=d;
                it=st.find(p);
                st.erase(it);
            }
        }
    }
}
