#include <stdio.h>
int main() {
int n, flag;
// 循环读取输入,直到文件结束(EOF)
while (scanf("%d", &n) != EOF) {
// 读取排序标志
scanf("%d", &flag);
// 定义用户数组、成绩数组和标记数组
char user[n][100];
int grade[n];
int chose[n];
// 初始化标记数组,将所有元素置为 0
for (int k = 0; k < n; k++) {
chose[k] = 0;
}
// 读取每个用户的姓名和成绩
for (int i = 0; i < n; i++) {
scanf("%s %d", user[i], &grade[i]);
}
if (flag == 1) {
// 升序排序
for (int i = 0; i < n; i++) {
int minIndex = -1;
int min = 10000;
// 遍历成绩数组,找出未标记的最小成绩及其索引
for (int j = 0; j < n; j++) {
if (grade[j] < min && chose[j] != 1) {
min = grade[j];
minIndex = j;
}
}
// 输出最小成绩对应的用户信息
printf("%s %d\n", user[minIndex], min);
// 标记该元素已被处理
chose[minIndex] = 1;
}
} else if (flag == 0) {
// 降序排序
for (int i = 0; i < n; i++) {
int maxIndex = -1;
int max = -1;
// 遍历成绩数组,找出未标记的最大成绩及其索引
for (int j = 0; j < n; j++) {
if (grade[j] > max && chose[j] != 1) {
max = grade[j];
maxIndex = j;
}
}
// 输出最大成绩对应的用户信息
printf("%s %d\n", user[maxIndex], max);
// 标记该元素已被处理
chose[maxIndex] = 1;
}
}
}
return 0;
}