#include <bits/stdc++.h>
using   namespace  std ;
using LL  =  long long ;

short int mark[500005] ;

class cmp{
public: 
    bool operator () (const pair<int, int> &p1, const pair<int, int> &p2){
        return ((p1.first < p2.first) || (p1.first == p2.first && p1.second > p2.second)) ;
    }
} ;

int main(){

    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int q ;
    cin >>  q ;

    int id = 0 ;
    queue<int> a ;
    priority_queue<pair<int, int> , vector<pair<int, int> > , cmp > b ;

    for(int i = 1 ; i <= q ; i++){
        int x ;
        cin >> x ;

        if(x == 1){
            int m ;
            cin >> m ;
            a.push(++id) ;
            b.push(make_pair(m, id)) ;
        }
        else if(x == 2){
            while(mark[a.front()])
                a.pop() ;
            cout << a.front() << " " ;
            mark[a.front()] = 1 ;
            a.pop() ;
        }
        else if(x == 3) {
            while(mark[b.top().second])
                b.pop() ;
            cout << b.top().second << " " ;
            mark[b.top().second] = 1 ;
            b.pop() ;
        }
    }
    cout << endl ;

    return 0;
}