#include <stdio.h>
#include <stdlib.h>

#define MAX 1000

int heap[MAX], heapSize = 0;
int lastProcessed = -1;
void swap(int *a, int *b) {
    int t = *a;
    *a = *b;
    *b = t;
}

// Heap insert
void insertHeap(int x) {
    heap[++heapSize] = x;
    int i = heapSize;
    while (i > 1 && heap[i] < heap[i/2]) {
        swap(&heap[i], &heap[i/2]);
        i /= 2;
    }
}

/
void heapify(int i) {
    int left = 2*i, right = 2*i+1, smallest = i;
    if (left <= heapSize && heap[left] < heap[smallest]) smallest = left;
    if (right <= heapSize && heap[right] < heap[smallest]) smallest = right;
    if (smallest != i) {
        swap(&heap[i], &heap[smallest]);
        heapify(smallest);
    }
}

// Extract min
int extractMin() {
    if (heapSize == 0) return -1;
    int minVal = heap[1];
    heap[1] = heap[heapSize--];
    heapify(1);
    return minVal;
}

// Print current heap in ascending order
void printHeap() {
    if (heapSize == 0) {
        printf("0\n");
        return;
    }
    int tempHeap[MAX], tempSize = heapSize;
    for (int i = 1; i <= heapSize; i++) tempHeap[i] = heap[i];

    while (heapSize > 0) {
        printf("%d ", extractMin());
    }
    printf("\n");

    // restore heap
    for (int i = 1; i <= tempSize; i++) heap[i] = tempHeap[i];
    heapSize = tempSize;
}

int main() {
    int N;
    scanf("%d", &N);
    if (N < 0) {
        printf("Invalid input\n");
        return 0;
    }

    for (int i = 0; i < N; i++) {
        int op, x;
        scanf("%d", &op);

        if (op == 1) {
            scanf("%d", &x);
            if (x < 0) {
                printf("Invalid input\n");
                return 0;
            }
            insertHeap(x);
        }
        else if (op == 2) {
            int processed = -1, temp[MAX], tempSize = 0;
            while (heapSize > 0) {
                int val = extractMin();
                if (val >= lastProcessed) {
                    processed = val;
                    lastProcessed = val;
                    break;
                } else {
                    temp[++tempSize] = val;
                }
            }
            for (int j = 1; j <= tempSize; j++) insertHeap(temp[j]);

            if (processed != -1)
                printf("%d\n", processed);
        }
        else if (op == 3) {
            printHeap();
        }
        else {
            printf("Invalid input\n");
            return 0;
        }
    }
    return 0;
}