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并不存在
'''