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