//描述:用一维数组存储学号和成绩,然后,按成绩排序输出。
//输入描述:输入第一行包括一个整数N(1<=N<=100),代表学生的个数。 接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。
//输出描述:按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。 如果学生的成绩相同,则按照学号的大小进行从小到大排序。
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
struct student{
	int sno;
	int score; 
};
	

bool compare(student stu1,student stu2) {
	if(stu1.score<stu2.score){
		return true;
	}else if(stu1.score==stu2.score&&stu1.sno<stu2.sno){
		return true;
	}else{
		return false;
	}
}
int main(){
	
	int n;
	scanf("%d",&n);
	vector<student>vec(n);
	for(int i=0;i<n;i++){
		scanf("%d %d",&vec[i].sno,&vec[i].score);
	}
	sort(vec.begin(),vec.end(),compare);
	for(int i=0;i<n;i++){
		printf("%d %d\n",vec[i].sno,vec[i].score);
	}
	return 0;
}