#include <codecvt>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
class Grade {
  private:
    /* data */
  public:
    Grade(/* args */);
    ~Grade();
    string m_Name;
    int number;
    int m_Grade;
};

Grade::Grade(/* args */) = default;

Grade::~Grade() {
}
void foreach (vector<Grade> &V) {
    auto iter = V.begin();
    while (iter != V.end()) {
        cout << (*iter).m_Name << ' ' << (*iter).m_Grade <<endl;
        iter++;
    }
}
bool cmp(Grade &num1, Grade &num2) { //desc
    if (num1.m_Grade == num2.m_Grade)
        return num1.number < num2.number;//降序 
    else
        return num1.m_Grade > num2.m_Grade;
}
bool cmp1(Grade &num1, Grade &num2) { //asc
    if (num1.m_Grade == num2.m_Grade)
        return num1.number < num2.number;//升序
    else
        return num1.m_Grade < num2.m_Grade;
}
int main() {
    int a, b;
    vector<Grade> v1;
    // cout << "enter a b:\n";
    while (cin >> a) {
        v1.clear();
        cin >> b;
        cin.get();
        int Number = 0;
        while (a--) {
            // cout << "str1 num:\n";
            Grade g;
            cin >> g.m_Name >> g.m_Grade;
            g.number=Number;
            Number++;
            v1.push_back(g);
        }
        if (b == 1)
            sort(v1.begin(), v1.end(), cmp1);
        else
            sort(v1.begin(), v1.end(), cmp);
        foreach(v1);
    }

    return 0;
}