#include<bits/stdc++.h>
using namespace std;
bool cmp0(pair<string, int> a ,pair<string, int> b) { //按成绩从大到小排序
return a.second>b.second;
}
bool cmp1(pair<string, int> a ,pair<string, int> b) { //按成绩从小到大排序
return a.second<b.second;
}
int main() {
int num,sort_type; //num为待排序的人数,sort_type为排序规则,低到高或高到低
while(cin>>num>>sort_type) { //输入人数和排序规则
cin.get(); //读取键盘缓冲区的换行符,否则geline遇到换行符会直接跳过
vector<pair<string, int>> scoretable; //存放(用户,成绩)序列
for(int i=0;i<num;i++) { //输入每个记录的用户和成绩
string str; //获取输入的一行字符串
getline(cin, str);
stringstream ss(str); //stringstream结合getline实现字符串分割
string name,tmp; //name存放用户名,tmp为临时变量
getline(ss, name, ' ');
getline(ss, tmp,' ');
int score = atoi(tmp.c_str()); //将字符串tmp转化为整型数据score
scoretable.push_back(make_pair(name, score)); //向容器scoretable中添加一项(用户,成绩)记录
}
if(sort_type==1) //如果sort_type为1,则按成绩由低到高排序
stable_sort(scoretable.begin(), scoretable.end(), cmp1); //stable_sort函数为稳定排序,即自动实现相同成绩,先输入的排在前面
else if(sort_type==0) //如果sort_type为0,则按成绩由高到低排序
stable_sort(scoretable.begin(), scoretable.end(), cmp0); //stable_sort函数为稳定排序,即自动实现相同成绩,先输入的排在前面
for(int i=0;i<num;i++) { //输出每项记录
cout<<scoretable[i].first<<" "<<scoretable[i].second<<endl;
}
}
return 0;
}