#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// 学生结构体
typedef struct {
    char name[100];
    int score;
    int index;  // 用于稳定排序的索引
} Student;

// 降序排序函数
int compare_desc(const void* a, const void* b) {
    Student* s1 = (Student*)a;
    Student* s2 = (Student*)b;
    // 成绩高的排在前面
    if (s1->score != s2->score) {
        return s2->score - s1->score;
    }
    // 成绩相同时,按输入顺序排列
    return s1->index - s2->index;
}

// 升序排序函数
int compare_asc(const void* a, const void* b) {
    Student* s1 = (Student*)a;
    Student* s2 = (Student*)b;
    // 成绩低的排在前面
    if (s1->score != s2->score) {
        return s1->score - s2->score;
    }
    // 成绩相同时,按输入顺序排列
    return s1->index - s2->index;
}

// 主要功能函数
void fun(int n, int sort_type, Student students[]) {
    // 根据排序类型选择不同的比较函数
    if (sort_type == 0) {
        // 降序排序
        qsort(students, n, sizeof(Student), compare_desc);
    } else {
        // 升序排序
        qsort(students, n, sizeof(Student), compare_asc);
    }
    // 输出排序结果
    for (int i = 0; i < n; i++) {
        printf("%s %d\n", students[i].name, students[i].score);
    }
}

int main() {
    int n;          // 学生人数
    int sort_type;  // 排序类型:0-降序,1-升序
    // 循环处理多组数据
    while (scanf("%d", &n) != EOF) {
        scanf("%d", &sort_type);
        Student* students = (Student*)malloc(n * sizeof(Student));
        // 输入学生信息
        for (int i = 0; i < n; i++) {
            scanf("%s %d", students[i].name, &students[i].score);
            students[i].index = i;  // 记录输入顺序
        }
        // 调用主要功能函数
        fun(n, sort_type, students);
        free(students);  // 释放内存
    }
    return 0;
}