/*
TASK: sms
LANG: C++
*/
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct im
{char ime[16];
int num;
};
bool f(im x,im y)
{
    int r;
    r=strcmp(x.ime,y.ime);
    if(r==-1) return false;
    else return true;
}
int main()
{
    char ti[16],ime[100][16],sms[100][10][26],c[100];
    im ime2[100];
    int n,r,ip=-1,j,i,x,sorted[100];
    cin>>n;
    i=0;
    while(i<n)
    {
        cin.getline(ti,15,'\n');
        r=-1;
        for(j=0;j<=ip;j++)
        {
            r=strcmp(ime[j],ti);
            if(r==0)
            {
                c[j]++;
                cin>>x;
                cin.getline(sms[j][x],25,'\n');
            }
        }
        if(r==-1)
        {
            ip++;
            c[ip]=1;
            cin>>x;
            cin.getline(sms[ip][x],25,'\n');
        }
        i++;
    }
    for(i=0;i<=ip;i++)
    {
    strcpy(ime2[i].ime,ime[i]);
    ime2[i].num=i;
    }
    sort(ime2,ime2+ip,f);
    for(i=0;i<=ip;i++)
    {
        if(i!=ip)
        {
            cout<<ime[ime2[i].num]<<'\n';
            for(j=0;j<c[ime2[i].num];j++)
            cout<<sms[i][j]<<endl;
            cout<<endl;
        }
        else
        {
            cout<<ime[ime2[i].num]<<'\n';
            for(j=0;j<c[ime2[i].num];j++)
            if(j!=c[ime2[i].num])
            cout<<sms[i][j]<<endl;
            else cout<<sms[i][j];
        }
    }
    return 0;
}

            
                            
                
        
    
