#include <stdio.h>
#include<string.h>
struct st{
char a[15];
long b;
};?
int main ()?
{
struct st s[111]; long end[111]; char t[50][14],other[14]={'333'},son[50][14],gson[50][14]; char x[11]; int n;scanf("%d",&n);
getchar();
for(int i=0;i<n;i++)
{
scanf("%s%ld",s[i].a,&s[i].b);
}
for(int i=0;i<n;i++)//排序?
{
for(int j=0;j<n-1-i;j++)
{
if(strcmp(s[j].a,s[j+1].a)>0)
{
strcpy(x,s[j].a);
strcpy(s[j].a,s[j+1].a);
strcpy(s[j+1].a,x);
}
}
}
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(strcmp(s[i].a,s[j].a)==0&&s[i].b==s[j].b)
{
strcpy(s[i].a,other);//去名字和號碼同時重復的?
s[i].b=0;
}
}
}?
int k=0;
for(int i=0;i<n;i++)
{
if(strcmp(s[i].a,other)!=0)
{
strcpy(t[k],s[i].a);
end[k]=s[i].b;
k++;
}
}
for(int i=0;i<k;i++)
{
strcpy(son[i],t[i]);
}
for(int i=0;i<k-1;i++)//在上面的基礎上再去名字重復的;?
{
for(int j=i+1;j<k;j++)
{
if(strcmp(son[i],son[j])==0)
{
strcpy(son[i],other);
}
}
}
int word=0;
for(int i=0;i<k;i++)
{
if(strcmp(son[i],other)!=0)?
{
strcpy(gson[word],son[i]);
word++;
}
}
printf("\n");
int sum=0;
for(int i=0;i<word;i++)
{
sum=0;
for(int j=0;j<k;j++)
{
if(strcmp(gson[i],t[j])==0)
{
if(sum==0)
printf("%s %ld\n",gson[i],end[j]);
if(sum!=0)
printf("%s_%d %ld\n",gson[i],sum,end[j]);
sum++;
}
}
}
return 0;
}