#include <bits/stdc++.h>
using namespace std;
int n, pa[20][20];
string b[23], bh;
int ji;
char da;
struct great
{
string name;
int bai;
int cs;
char ttt;
} a[257];
int slzs(string p)
{
int sum = 0;
if (p[1] >= '0' && p[1] <= '9')
sum += p[1] - '0';
else
sum += p[1] - 'A' + 10;
if (p[0] >= '0' && p[0] <= '9')
sum += (p[0] - '0') * 16;
else
sum += (p[0] - 'A' + 10) * 16;
return sum;
}
void z(string bh, int x, int y)
{
int t = slzs(bh);
a[t].cs++;
a[t].name = bh;
pa[x][y] = t;
}
bool pai(great x, great y)
{
if (x.cs != y.cs)
return x.cs > y.cs;
else
return x.bai < y.bai;
}
int main()
{
cin >> n;
for (int i = 0; i < 256; i++)
a[i].cs = 0, a[i].bai = i;
for (int i = 1; i <= n; i++)
{
cin >> b[i];
for (int j = 0; j < b[i].size(); j += 2)
{
bh = b[i][j], bh += b[i][j + 1];
z(bh, i, j / 2);
bh = "";
}
}
sort(a, a + 256, pai);
for (int i = 0; i < 16; i++)
{
cout << a[i].name;
a[i].ttt = '0' + i;
if (a[i].ttt > '9')
a[i].ttt = 'A' + (i - 10);
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < b[i].size() / 2; j++)
{
ji = 1000;
da = ' ';
for (int k = 0; k < 16; k++)
{
if (abs(pa[i][j] - a[k].bai) < ji)
ji = abs(pa[i][j] - a[k].bai), da = a[k].ttt;
}
cout << da;
}
cout << endl;
}
return 0;
}