/*
TASK:sms
LANG:C++
*/
#include<iostream>
#include<string>
using namespace std;
string s[1000][1000],izp[1000],so[1000];
int k,n,izpn[1000];


void add(string sms,string pod,int num)
{
     int i;
     for(i=0;i<k;i++)
     {
                     if(pod==izp[i]){s[i][num]=sms;izpn[i]++;}
     }
}



int numf(string gtf)
{
    int i;
    for(i=0;i<k;i++)
    if(izp[i]==gtf)return i;
}


int check(string pod)
{
    int i;
    for(i=0;i<k;i++)
    {
                    if(izp[i]==pod)return 0;
    }
    return 1;
}


int main()
{
    cin>>n;
    getchar();
    char a=' ',b=' ';
    int i,j,num;
    string pod,sms;
    for(i=0;i<n;i++)
    {
                    pod="";
                    sms="";
                    while(a!='\n')
                    {
                                  scanf("%c",&a);
                                  if(a=='\n')break;
                                  pod+=a;
                    }
                    cin>>num;
                    getchar();
                    a=' ';
                    b=' ';
                    while(b!='\n')
                    {
                                  scanf("%c",&b);
                                  if(b=='\n')break;
                                  sms+=b;
                    }
                    if(check(pod)){izp[k]=pod;s[k][num-1]=sms;so[k]=pod;izpn[k++]++;}
                    else add(sms,pod,num-1);
    }
    sort(so,so+k);
    int p;
    for(i=0;i<k-1;i++)
    {
    cout<<so[i]<<endl;
     p=numf(so[i]);
    for(j=0;j<=izpn[p];j++)
    {
                    cout<<s[p][j]<<endl;
    }
    }
    p=numf(so[k-1]);
    cout<<so[k-1]<<endl;
    for(j=0;j<izpn[p]-1;j++)
    cout<<s[p][j]<<endl;
    cout<<s[p][izpn[p]-1]<<endl;
    return 0;
    }
    
    
