#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 tmp=arr[i];
                arr[i]=arr[j];
                arr[j]=tmp;
            }
        }
    }
}
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");
        return 0;
    }
    for(int i=0;i<N;i++){
        int op;
        if(scanf("%d",&op)!=1||op<1||op>3){
            printf("Invalid input");
            return 0;
    }
    if(op==1){
        int x;
        if(scanf("%d",&x)!=1||x<1||x>100000){
            printf("Invalid input");
            return 0;
        }
        enqueue(x);
    }
    else if(op==2){
        processNext();
    }
    else if(op==3){
        printLoads();
    }
}
return 0;
}