#include<bits/stdc++.h>
#define len strlen(g[0])
using namespace std;
int n;
char g[35][35];
struct ode{
int d,c;
string h;
ode(){
h="00";
c=0;
}
}node[305];
map<string,int>mp;
vector<string>v;
void init(){
for(int i=0;i<256;i++){
node[i].d=i;
int j=i;
string h;
do{
char c;
if(j%16<=9)c=char('0'+j%16);
else c=char('A'+j%16-10);
h+=c;
j%=16;
}while(j);
if(h.size()==1)node[i].h[1]=h[0];
else{
node[i].h[0]=h[1];
node[i].h[1]=h[0];
}
}
}
char gh(string h){
int idx=-1,mn=1e9,c=mp[h];
for(int i=0;i<v.size();i++)
if(mn>abs(c-mp[v[i]])){
mn=abs(c-mp[v[i]]);
idx=i;
}
if(idx<=9)return char('0'+idx);
else return char('A'+idx-10);
}
bool cmp(ode a,ode b){
return (a.c==b.c?a.d<b.d:a.c>b.c);
}
int main(){
init();
cin>>n;
for(int i=0;i<n;i++)cin>>g[i];
for(int i=0;i<n;i++)
for(int j=0;j<len/2;j++){
string h;
h+=g[i][j*2];
h+=g[i][j*2+1];
node[mp[h]].c++;
}
sort(node,node+300,cmp);
for(int i=0;i<16;i++){
cout<<node[i].h;
v.push_back(node[i].h);
}
cout<<endl;
for(int i=0;i<n;i++){
for(int j=0;j<len/2;j++){
string h;
h+=g[i][j*2];
h+=g[i][j*2+1];
cout<<gh(h);
}
cout<<endl;
}
return 0;
}