#include <stdio.h>
#include <stdlib.h>
#define MAXN 1000
#define MAXVAL 10000
int packets[MAXN];
int size = 0;
int lastProcessed = -1;
int cmp(const void *a, const void *b) {
    return ((int)a - (int)b);
}
void addPacket(int x) {
    packets[size++] = x;
    qsort(packets, size, sizeof(int), cmp);
}
void processPacket() {
    for (int i = 0; i < size; i++) {
        if (packets[i] >= lastProcessed) {
            lastProcessed = packets[i];
            printf("%d\n", packets[i]);
            for (int j = i; j < size - 1; j++) {
                packets[j] = packets[j+1];
            }
            size--;
            return;
        }
    }
    printf("0\n");
}
void printPackets() {
    if (size == 0) {
        printf("0\n");
        return;
    }
    for (int i = 0; i < size; i++) {
        printf("%d", packets[i]);
        if (i < size - 1) printf(" ");
    }
    printf("\n");
}
int main() {
    int N;
    if (scanf("%d", &N) != 1) {
        printf("Invalid input\n");
        return 0;
    }
    for (int i = 0; i < N; i++) {
        int type;
        if (scanf("%d", &type) != 1) {
            printf("Invalid input\n");
            return 0;
        }
        if (type == 1) {
            int x;
            if (scanf("%d", &x) != 1 || x <= 0 || x > MAXVAL) {
                printf("Invalid input\n");
                return 0;
            }
            addPacket(x);
        }
        else if (type == 2) {
            processPacket();
        }
        else if (type == 3) {
            printPackets();
        }
        else {
            printf("Invalid input\n");
            return 0;
        }
    }
     return 0;
}