range_n = input()  # 接收输入集中第一行
sort_value = input()  # 接收输入集中第二行
# print(range_n)
# print(sort_value)
data = []  # 创建空列表,用来保存学生姓名和成绩
try:  # 尝试以下操作
    while True:  # 一直循环
        line = input()  # 在循环中重复读取输入集中的内容,因为第一行、第二行已经在代码开头分别读取过,所以这里开始读取的就是姓名和成绩
        if line == '':  # 判断:当input输入集中的数据读取完时,即 读取到的值为空值
            break  # 停止循环
        name,score = line.split(' ')  # 对“姓名 成绩”以空格分割,分别赋值给name、score
        data.append((name,int(score)))  # 将name、score以元组(不可变类型)添加进data列表,同时将score转化为整数型,方便后续排序
except EOFError:  # 当尝试的操作报错时
    pass  # 停止尝试

if sort_value == '0':  # 根据题意,当排序数为0时
    for i in sorted(data, key=lambda x: x[1],reverse=True):  # 对data中的元素进行降序排序
        print(i[0],i[1])  # 因为data中的元素是元组,且题意要求输出的name和score之间有空格,所以依次打印元组的元素
else:  # 当排序数为1时
    for i in sorted(data, key=lambda x: x[1],reverse=False):  # 对data中的元素进行降序排序
        print(i[0],i[1])
''' 
重点:我看评论区里有很多同学不太清楚为什么sorted()中,参数key=lamda x: x[1]
    --sorted()中,参数key需要传入的是一个函数.这个函数的意义在于,告诉sorted()要用什么值来比较每个元素
    --lambda中:
        ---x代表data中的每一个元素
        ---data中的元素是元组:('fang',70),('yang',80)...
        ---x[1]代表每个元组的第二个元素:70,80...
    所以综上,key的参数lambda可以解释成:
        对data中的每一个元素(元组),以元组的第二个元素(分数)来比较每个元素
    整个sorted()的解释可以是:
        在data中(data),
        对data的每一个元素(元组),以元组的第二个元素(分数)来比较每个元素(key=lambda x: x[1]),
        以升序/降序进行排序(reverse=True/False)
误区:为什么不能直接用key=i[1]?
    1.首先key的传参要求是一个函数,不能是一个固定的值
    2.i[1]中,虽然i是循环遍历data的结果,但是在sorted()排序时,i并不存在
'''