#include<iostream>
#include<algorithm>
using namespace std;

//复习结构体
struct Student {
    int stuNum;
    int score;
};

const int maxN = 101;

struct Student list[maxN];

bool Compare(Student x, Student y) {
    if (x.score == y.score) {
        return x.stuNum < y.stuNum;
    } else {
        return x.score < y.score;
    }
}
//Compare函数定义规则:
//如果x,y是排序规则需要的顺序,则返回1

int main() {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d %d", &list[i].stuNum, &list[i].score);
    }
    sort(list, list + n, Compare);
    for (int i = 0; i < n; i++) {
        printf("%d %d\n", list[i].stuNum, list[i].score);
    }
    //学习自定义比较函数并用于sort
    //注意scanf '\n'吸收的问题
    //https://zhuanlan.zhihu.com/p/141802781
    //对于scanf的格式串来说
    //任何的空格字符(whitespaces)会匹配多个(可以没有)空格字符。所以当你敲下换行的时候,scanf还没法返回,因为他不知道后面还有没有更多的空格字符。此时scanf只有读到下一个非空格字符(比如说你的输入中的a字符),或者输入流被关闭(比如读到EOF)的时候,才会返回。
    //https://www.zhihu.com/question/557303828

}

Caution: scanf读%c之前必须要getchar()吸收上一次输入结束时输入的\n