#include<stdio.h>
#include<stdlib.h>
#include<vector>
struct WORD{int a,b,c;} w[1010]={0}, sol[1010]={0};
int compare(const void*a, const void*b)
{
	WORD *pa=(WORD *)a;
	WORD *pb=(WORD *)b;
	if(pa->a==pb->a && pa->b == pb->b)
		return pa->c - pb->c;
	else if(pa->a==pb->a)
		return pa->b - pb->b;
	return pa->a-pb->a;
}
std::vector<WORD> G[110];
int pre[110]={0}, post[110]={0},st[110]={0},n;
int chk[110][1010]={0}, flag;
void dfs(WORD v,int id, int ed)
{
	int i;
	if(flag) return;
	if(id==ed-1)
	{
		for(i=0;i<ed-1;i++)
			printf("%02d%06d%02d\n",sol[i].a,sol[i].b,sol[i].c);
		printf("%02d%06d%02d\n",v.a,v.b,v.c);
		flag=1;
		return;
	}
	sol[id]=v;
	for(i=0;i<G[v.c].size();i++)
		if(!chk[v.c][i]){ 
			chk[v.c][i]=1;
			dfs(G[v.c][i],id+1,n);
			chk[v.c][i]=0;
		}
}
main()
{
	int i, j, c, l=0;
	freopen(".4.in","r",stdin);
	freopen("out.txt","w",stdout);
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%02d%06d%02d",&w[i].a,&w[i].b,&w[i].c);
		pre[w[i].a]++,post[w[i].c]++;
	}
	qsort(w,n,sizeof(WORD),compare);
	for(i=0;i<100;i++) if(pre[i]-post[i]>0) st[l++]=i;
	for(i=c=0;i<100;i++) while(w[c].a==i) G[i].push_back(w[c++]);
	for(j=0;j<l;j++)
		for(i=0;i<G[st[j]].size();i++)
			chk[st[j]][i]=1,dfs(G[st[j]][i],0,n),chk[st[j]][i]=0;

}
