#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

typedef struct {
    int rok;  // rok narodenia
    int id;   // identifikacne cislo
} osoba;

int partition(osoba a[], int left, int right) {
    /* Funkcia preusporiada prvky casti pola a[left]..a[right], pricom
     * osoby porovnava podla roku narodenia a pri rovnakom roku
     * zanecha povodne poradie zo vstupu. Prvok a[left] pouzije ako
     * pivot. Do prvej casti pola od pozicie left budu vsetky prvky s
     * rokom narodenia mensim ako pivot, do druhej ostatne
     * prvky. Pivot bude na ako prva hodnota v pravej casti pola a
     * jeho umiestnenie vratime ako navratovu hodnotu. */

    assert(left <= right);
    // TODO: vas kod tu
}


void quicksort(osoba a[], int left, int right) {
    if (left >= right) {
        return;
    }

    int middle = partition(a, left, right);

    quicksort(a, left, middle - 1);
    quicksort(a, middle + 1, right);
}

int main(void) {
    // nacitanie vstupu
    int n;
    scanf("%d", &n);
    osoba *a = malloc(sizeof(osoba) * n);
    for (int i = 0; i < n; i++) {
        scanf("%d %d", &a[i].rok, &a[i].id);
    }
    quicksort(a, 0, n - 1);
    for (int i = 0; i < n; i++) {
        printf("%d %d\n", a[i].rok, a[i].id);
    }
    // TODO: spravne uvolnite pole a

}
