#include<bits/stdc++.h>
using namespace std;
int n;
string s;
int a[50][50];
int b[256];
int z_ten(string px)
{
int ss=0;
if(px[1]>='A') ss+=px[1]-55;
else ss+=px[1]-'0';
if(px[0]>='A') ss+=(px[0]-55)*16;
else ss+=(px[0]-'0')*16;
return ss;
}
string z_six(int l)
{
int aa,bb;
aa=l%16;
l/=16;
bb=l%16;
char a1,b1;
if(aa>9) a1=char(aa+55);
else a1=char(aa+'0');
if(bb>9) b1=char(bb+55);
else b1=char(bb+'0');
string jkl="";
jkl=jkl+b1+a1;
return jkl;
}
struct st{
int fj;//十进制数
int cnt;//次数
char xs;//现在编号
}u[1000];
bool cmp(st qq,st pp)
{
if(qq.cnt!=pp.cnt)
return qq.cnt > pp.cnt;
else return qq.fj < pp.fj;
}
bool cmpx(st qq,st pp)
{
return qq.fj < pp.fj;
}
int main()
{
int n,j=1;
cin >> n;
int l;
for(int i=1;i<=n;i++)
{
cin >> s;
l=s.size();
for(int j=0;j<l;j+=2)
{
string lp="";
lp=lp+s[j]+s[j+1];
a[i][j/2+1]=z_ten(lp);
b[z_ten(lp)]++;
}
}
int u_size=0;
for(int i=0;i<=255;i++)
{
if(b[i]!=0)
{
u[++u_size].cnt=b[i];
u[u_size].fj=i;
}
}
sort(u+1,u+u_size+1,cmp);
for(int i=1;i<=16;i++)
{
cout << z_six(u[i].fj);
if(i<=10) u[i].xs = i+'0'-1;
else u[i].xs = i+'0'+6;
}
cout << endl;
u_size=16;
sort(u+1,u+u_size+1,cmpx);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=l/2;j++)
{
for(int k=2;k<=u_size;k++)
{
if(u[k].fj>=a[i][j])
{
if(abs(u[k].fj-a[i][j])>abs(u[k-1].fj-a[i][j])) cout << u[k-1].xs;
else cout << u[k].xs;
break;
}
}
}
cout << endl;
}
return 0;
}
#求大lao相助