#include <stdio.h>
#include <stdlib.h>
typedef struct{
int ID;
int score;
}Grade;
void printGrade(Grade g);
void sort(Grade*grade,int l,int r);
void swap(Grade*a,Grade*b);
int compare(Grade*a,Grade*b);
int main() {
int n;
scanf("%d",&n);
Grade*grade=(Grade*)malloc(n*sizeof(Grade));
for(int i=0;i<n;i++)scanf("%d %d",&grade[i].ID,&grade[i].score);
sort(grade,0,n-1);
for(int i=0;i<n;i++)printGrade(grade[i]);
return 0;
}
void sort(Grade*grade,int l,int r){
if(l>=r) return;
int i=l,j=r;
Grade*pivot=grade+l;
while(j>i){
while(i<=j&&!compare(grade+i,pivot)) i++;
while(j>=i&&compare(grade+j,pivot)) j--;
if(i<j) swap(grade+i,grade+j);
}
swap(pivot,grade+j);
sort(grade,l,j-1);
sort(grade,j+1,r);
}
void printGrade(Grade g){
printf("%d %d\n",g.ID,g.score);
}
void swap(Grade*a,Grade*b){
int tempID=a->ID;
int tempScore=a->score;
a->ID=b->ID;a->score=b->score;
b->ID=tempID;b->score=tempScore;
}
int compare(Grade*a,Grade*b){
int result;
if(a->score>b->score) result=1;
else if(a->score<b->score) result=0;
else if(a->ID>b->ID) result=1;
else result=0;
return result;
}