#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;
}