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

#define SIZE 5

void print(int **arr) {
    int i;
    for (i = 0; i < SIZE; ++i) {
        printf("%d ", arr[i][0]);
        printf("%d\n", arr[i][1]);
    }
}

int compare(const void *lhs, const void *rhs)
{
    const int *l = *(const int**)lhs;
    const int *r = *(const int**)rhs;
    if (l[0] > r[0]) 
        return 1;
    else if (l[0] < r[0])
        return -1;
    else {
        if (l[1] > r[1])
            return 1;
        else if (l[1] < r[1])
            return -1;
        else
            return 0;
    }
}

int main()
{
    int **arr = (int**)malloc(SIZE*sizeof(int*));
    int *tmp = (int*)malloc(SIZE*2*sizeof(int));
    int i;

    for (i = 0; i < SIZE; ++i) {
        arr[i] = &tmp[i*2];
    }
    arr[0][0] = 2;
    arr[0][1] = 2;

    arr[1][0] = 2;
    arr[1][1] = 1;

    arr[2][0] = 1;
    arr[2][1] = 1;

    arr[3][0] = 1;
    arr[3][1] = 0;
    
    arr[4][0] = 0;
    arr[4][1] = 0;

    print(arr);
    qsort(arr, SIZE, sizeof(int*), compare);
    printf("\n");
    print(arr);

    free(tmp);
    free(arr);
    
    return 0;

}

