#include<bits/stdc++.h>
using namespace std;
struct node{
int tong;
int bian;
}a[500];
int n;
int good[20];
string s[25];
bool cmp(node x,node y){
if (x.tong!=y.tong){
return x.tong>y.tong;
}else{
return x.bian<y.bian;
}
}
int main(){
cin>>n;
for(int i=0;i<=15;i++){
for(int j=0;j<=15;j++){
a[i*26+j].bian=i*26+j;
}
}
for(int i=1;i<=n;i++){
cin>>s[i];
for(int j=0;j<s[i].size();j+=2){
int x,y;
if (s[i][j]>='0'&&s[i][j]<='9'){
x=s[i][j]-'0';
}else{
x=s[i][j]-'A'+10;
}
if (s[i][j+1]>='0'&&s[i][j+1]<='9'){
y=s[i][j+1]-'0';
}else{
y=s[i][j+1]-'A'+10;
}
a[x*26+y].tong++;
}
}
sort(a,a+1+405,cmp);
int p=0;
for(int i=0;i<=15;i++){
int z=a[i].bian;
good[++p]=z;
int x=z/26;
int y=z%26;
if (x>=10){
cout<<char(x-10+'A');
}else{
cout<<x;
}
if (y>=10){
cout<<char(y-10+'A');
}else{
cout<<y;
}
}
cout<<endl;
for(int i=1;i<=n;i++){
for(int j=0;j<s[i].size();j+=2){
int x,y;
if (s[i][j]>='0'&&s[i][j]<='9'){
x=s[i][j]-'0';
}else{
x=s[i][j]-'A'+10;
}
if (s[i][j+1]>='0'&&s[i][j+1]<='9'){
y=s[i][j+1]-'0';
}else{
y=s[i][j+1]-'A'+10;
}
int z=x*26+y,deng=INT_MAX;
cout<<z<<" ";
bool f=false;
for(int j=1;j<=16;j++){
if (z==good[j]){
if (j-1<10){
cout<<j-1;
}else{
cout<<char((j-1-10)+'A');
}
cout<<endl;
f=true;
break;
}
}
if (f){
continue;
}
for(int j=1;j<=16;j++){
deng=min(deng,abs(good[j]-z));
}
for(int j=1;j<=16;j++){
if (abs(good[j]-z)==deng){
if (j-1<10){
cout<<j-1;
}else{
cout<<char((j-1-10)+'A');
}
cout<<endl;
break;
}
}
}
cout<<endl;
}
return 0;
}