#include<bits/stdc++.h>
using namespace std;
int n,x,lens,minn,idm;
string s;
int a[22][22],b[22][22];
struct node{
int cs,id;
}h[282];
bool cmp(node x,node y){
if(x.cs!=y.cs) return x.cs>y.cs;
return x.id<y.id;
}
int main(){
cin>>n;
for(int i=1;i<=n;++i){
cin>>s;
if(i==1) lens=s.size();
for(int j=0;j<=lens-1;j+=2){
if(s[j]>='0'&&s[j]<='9') a[i][(j+2)/2]+=(s[j]-48)*16;
else a[i][(j+2)/2]+=(s[j]-55)*16;
if(s[j+1]>='0'&&s[j+1]<='9') a[i][(j+2)/2]+=(s[j+1]-48);
else a[i][(j+2)/2]+=(s[j+1]-55);
h[a[i][(j+2)/2]].cs++;
h[a[i][(j+2)/2]].id=a[i][(j+2)/2];
}
}
lens/=2;
sort(h+1,h+257,cmp);
for(int i=1;i<=16;++i){
int id1=h[i].id/16,id2=h[i].id%16;
if(id1>=10) cout<<char(id1+
55);
else cout<<char(id1+48);
if(id2>=10) cout<<char(id2+55);
else cout<<char(id2+48);
}
cout<<"\n";
for(int i=1;i<=n;++i) for(int j=1;j<=lens;++j){
minn=256;
for(int k=1;k<=16;++k) if(abs(a[i][j]-h[k].id)<=minn){
minn=abs(a[i][j]-h[k].id);
idm=k;
}
b[i][j]=idm;
}
for(int i=1;i<=n;++i){
for(int j=1;j<=lens;++j){
if(b[i][j]>=10) cout<<char(b[i][j]+55);
else cout<<char(b[i][j]+48);
}
cout<<"\n";
}
return 0;
}
WA
WHY?