#include<bits/stdc++.h>
using namespace std;
long long n,mx=1000,pos;
char a,b;
long long cnt[520],tot,p[260],tt,shu[520];
char mu[21]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
long long zi(char a){
if(a>='0' && a<='9') return a-'0';
else if(a>='A' && a<='F') return a-'A'+10;
}
long long change(char a,char b){
return zi(b)+16*zi(a);
}
long long hui(long long x){
long long l=x,r=x;
while(1){
--l;
++r;
if(cnt[l]!=0) return cnt[l]-1;
if(cnt[r]!=0) return cnt[r]-1;
}
}
char ch[51][51];
int main(){
scanf("%lld\n",&n);
for(long long i=1;i<=n;i++){
tot=0;
do{
a=getchar();
if(a=='\n') break;
b=getchar();
if(b=='\n') break;
cnt[change(a,b)]++;
ch[i][++tot]=a;
ch[i][++tot]=b;
}while(a!='\n' && b!='\n');
shu[i]=tot;
}
do{
mx=0;
for(long long i=0;i<=255;i++){
if(cnt[i]>mx){
mx=cnt[i];
pos=i;
}
}
if(mx==0) break;
p[++tt]=pos;
cnt[pos]=0;
}while(mx!=0);
for(long long i=1;i<=min((long long)16,tt);i++){
cout<<mu[p[i]/16]<<mu[p[i]%16];
cnt[p[i]]=i;
}
cout<<endl;
for(long long i=1;i<=n;i++){
for(long long j=0;j<shu[i]/2;j++){
if(cnt[change(ch[i][j*2+1],ch[i][j*2+2])]!=0){
cout<<mu[cnt[change(ch[i][j*2+1],ch[i][j*2+2])]-1];
}else{
cout<<mu[hui(change(ch[i][j*2+1],ch[i][j*2+2]))];
}
}
cout<<endl;
}
return 0;
}