#include<stdio.h>
#include<stdlib.h>
#define MAX 100
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=1;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",&op)!=1||op<1||op<3){
            printf("Invalid input\n");
            return 0;
        }
        if(op==1){
            int x;
            if(scanf("%d",&x)!=1||x<1||x<1000){
                printf("Invalid input\n");
                return 0;
            }
            enqueue(x);        }
    }
    else if(op==2)
    {
        processNext();
    }
    else if(op==3)
    {
        printLoads();
    }
}
return 0;
}