#include<stdio.h>
#include<stdlib.h>

#define MAX 1000

int queue[MAX],qsize = 0;
int templist[MAX],tsize = 0;
int lastProcessed = -1;

void enqueue(int x){
    queue[qsize++] = x;
}

void sort(int arr[],int n){
    for(int i = 0;i<n-1;i++){
        for(int j = i+1;j<n;j++){
            if(arr[i]>arr[j]){
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp; 
            }
        }
    }
}
void processNext(){
    if(qsize == 0){
        printf("0\n");
        return;
    }
    sort(queue,qsize); 
    int found = 0;
    for(int i=0;i<qsize;i++){
        if(lastProcessed == -1||queue[i]>=lastProcessed){
            lastProcessed = queue[i];
            printf("%d\n",queue[i]);
            for(int j=i;j<qsize-1;j++){
                queue[j] = queue[j+1];
            }
            qsize--;
            found = 1;
            break;
        }
    }
    if(!found){
        for(int i=0;i<qsize;i++){
            templist[tsize++]=queue[i];
        }
        qsize=0;
        printf("0\n");
    }
}
void printLoads(){
    if(qsize==0 && tsize ==0){
        printf("0\n");
        return;
    }
    int all[MAX*2],n=0;
    for(int i=0;i<qsize;i++)all[n++]=queue[i];
    for(int i=0;i<tsize;i++)all[n++]=tempList[i];
    sort(all,n);
    for(int i=0;i<n;i++){
        printf("%d",all[i]);
        if(i<n-1)printf(" ");
    }
    printf("\n");
}
int main(){
    int N;
    if(scanf("%d",&N)!=1||N<1||N>MAX){
        printf("Invalid input\n");
        return 0;
    }
    for(int i=0;i<N;i++){
        int op;
        if(scanf("%d",&opp)!=1||op<1||op>3){
            printf("Invalid input\n");
            return 0;
        }
        if(op==1){
            int x;
            if(scanf("%d",&x)!=1||x<1||x>10000){
                printf("Invalid input\n");
                return 0;
            }
            enqueue(x);
        }
        else if(op==2){
            processNext;
        }
    }
}