// Exemplo de ordenacao customizada de pessoas
// Primeiro por ordem crescente da idade, e em caso de empate por
// ordem crescente alfabetica do nome
// -------------------------------------
// Pedro Ribeiro (DCC/FCUP) - 13/11/2021
// -------------------------------------

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

// Tipo para guardar uma pessoa
typedef struct {
  int age;
  string name;
} Person;

// Funcao para comparar dois elementos de um array (necessaria para o sort)
// Esta funcao deve devolver:
//  - true se elemento p1" for menor que elemento "p2"
//  - false se elemento "p1" for maior ou igual ao elemento "p2"
struct comparePerson {
  bool operator()(const Person p1, const Person p2) {
    if (p1.age < p2.age) return true;
    if (p1.age > p2.age) return false;
    // compare e uma funcao que ja existe no C++ - veja o manual se nao conhece
    return p1.name.compare(p2.name)<0;
  }
};

int main() {
  int n;

  cin >> n;

  vector<Person> v;
  for (int i=0; i<n; i++) {
    Person p;
    cin >> p.age >> p.name;
    v.push_back(p);
  }

  // Chamada ao sort padrao da linguagem C++
  sort(v.begin(), v.end(), comparePerson());

  for (Person p : v)
  cout << p.age << " " << p.name << endl;
  
  return 0;
}