#include<bits/stdc++.h>
using namespace std;
int a[21][21],b[256],c[17],d[16],e[16],n,k,m;
string s;
int f(char x){
if('0'<=x&&x<='9'){
return x-'0';
}
return x-'A'+10;
}
bool cmp(int x,int y){
return x<y;
}
void out(int k){
if(k<10){
cout<<k;
}else{
cout<<char(k-10+'A');
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>s;
m=s.size();
for(int j=0;j<m;j+=2){
a[i][j/2]=f(s[j])*16+f(s[j+1]);
b[a[i][j/2]]++;
}
}
m/=2;
memset(c,-1,sizeof(c));
for(int i=0;i<256;i++){
c[16]=i;
for(int j=15;j+1&&(c[j]==-1||b[c[j]]<b[c[j+1]]);j--){
swap(c[j],c[j+1]);
}
}
for(int i=0;i<16;i++){
d[i]=c[i];
out(c[i]/16);
out(c[i]%16);
}
cout<<"\n";
sort(d,d+16,cmp);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
for(k=0;k<16;k++){
if(d[k]>a[i][j]){
break;
}
}
if(k==16){
a[i][j]=d[15];
}else if(a[i][j]*2-d[k-1]-d[k]){
a[i][j]=(a[i][j]-d[k-1]<d[k]-a[i][j])?(d[k-1]):(d[k]);
}else{
a[i][j]=(min(d[k-1],d[k]));
}
for(k=0;k<16;k++){
if(a[i][j]==c[k]){
out(k);
break;
}
}
}
cout<<"\n";
}
return 0;
}