/*
TASK:sms
LANG:C++
*/
#include<iostream>
#include<queue>
using namespace std;
struct data{
       string name;
       int num;
       string text;};
struct cmp:
       binary_function<data, data, bool>{
       bool operator()(data a, data b){
            if(a.name>b.name) return true;
            if(a.name==b.name)
            if(a.num>b.num) return true;
            return false;}};
priority_queue<data, vector<data>, cmp> q;
int main(){
    int n;
    char k[10];
    cin >> n;
    for(int i=0;i<n;i++){
            data a;
            char c;
            cin >> c;
            while(c!='\n'){
                           a.name+=c;
                           c=cin.get();}
            cin >> a.num;
            cin >> c;
            while(c!='\n'){
                           a.text+=c;
                           c=cin.get();}
            q.push(a);}
    string prname;
    cout << q.top().name << endl;
    while(!q.empty()){
                      cout << q.top().text << endl;
                      prname=q.top().name;
                      q.pop();
                      if(prname!=q.top().name && q.size()>0) cout << endl << q.top().name << endl;
                      }
    return 0;
}
