#include <iostream>
#include <string.h>
using namespace std;
int check[26], ypos[12], xpos[12], cnt;
char map[5][9], result[12] = { 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'}, combine[12];
int validate()
{
int tmp1 = (map[0][4] - 64) + (map[1][3] - 64) + (map[2][2] - 64) + (map[3][1] - 64);
int tmp2 = (map[3][1] - 64) + (map[3][3] - 64) + (map[3][5] - 64) + (map[3][7] - 64);
int tmp3 = (map[3][7] - 64) + (map[2][6] - 64) + (map[1][5] - 64) + (map[0][4] - 64);
int tmp4 = (map[1][1] - 64) + (map[2][2] - 64) + (map[3][3] - 64) + (map[4][4] - 64);
int tmp5 = (map[4][4] - 64) + (map[3][5] - 64) + (map[2][6] - 64) + (map[1][7] - 64);
int tmp6 = (map[1][7] - 64) + (map[1][5] - 64) + (map[1][3] - 64) + (map[1][1] - 64);
if (tmp1 != 26 || tmp2 != 26 || tmp3 != 26 || tmp4 != 26 || tmp5 != 26 || tmp6 != 26) return 0;
else
{
combine[0] = map[0][4];
combine[1] = map[1][3];
combine[2] = map[2][2];
combine[3] = map[3][1];
combine[4] = map[3][3];
combine[5] = map[3][5];
combine[6] = map[3][7];
combine[7] = map[2][6];
combine[8] = map[1][5];
combine[9] = map[1][2];
combine[10] = map[4][4];
combine[11] = map[1][7];
return 1;
}
}
void compare()
{
if (strcmp(combine, result) == -1)
{
strcpy(result, combine);
}
}
void solve(int pos)
{
if (pos == cnt)
{
if (validate())
{
compare();
}
return ;
}
for (int i = 1; i <= 12; i++)
{
if (check[i] == 0)
{
check[i] = 1;
map[ypos[pos]][xpos[pos]] = 64 + i;
solve(pos + 1);
check[i] = 0;
}
}
}
int main()
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 9; j++)
{
cin >> map[i][j];
if (map[i][j] >= 'A' && map[i][j] <= 'Z')
check[map[i][j] - 64] = 1;
if (map[i][j] == 'x')
{
ypos[cnt] = i;
xpos[cnt] = j;
cnt++;
}
}
}
solve(0);
map[0][4] = result[0];
map[1][3] = result[1];
map[2][2] = result[2];
map[3][1] = result[3];
map[3][3] = result[4];
map[3][5] = result[5];
map[3][7] = result[6];
map[2][6] = result[7];
map[1][5] = result[8];
map[1][2] = result[9];
map[4][4] = result[10];
map[1][7] = result[11];
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 9; j++)
cout << map[i][j];
cout << "\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IGNoZWNrWzI2XSwgeXBvc1sxMl0sIHhwb3NbMTJdLCBjbnQ7CmNoYXIgbWFwWzVdWzldLCByZXN1bHRbMTJdID0geyAneicsICd6JywgJ3onLCAneicsICd6JywgJ3onLCAneicsICd6JywgJ3onLCAneicsICd6JywgJ3onfSwgY29tYmluZVsxMl07CgppbnQgdmFsaWRhdGUoKQp7CglpbnQgdG1wMSA9IChtYXBbMF1bNF0gLSA2NCkgKyAobWFwWzFdWzNdIC0gNjQpICsgKG1hcFsyXVsyXSAtIDY0KSArIChtYXBbM11bMV0gLSA2NCk7CglpbnQgdG1wMiA9IChtYXBbM11bMV0gLSA2NCkgKyAobWFwWzNdWzNdIC0gNjQpICsgKG1hcFszXVs1XSAtIDY0KSArIChtYXBbM11bN10gLSA2NCk7CglpbnQgdG1wMyA9IChtYXBbM11bN10gLSA2NCkgKyAobWFwWzJdWzZdIC0gNjQpICsgKG1hcFsxXVs1XSAtIDY0KSArIChtYXBbMF1bNF0gLSA2NCk7CglpbnQgdG1wNCA9IChtYXBbMV1bMV0gLSA2NCkgKyAobWFwWzJdWzJdIC0gNjQpICsgKG1hcFszXVszXSAtIDY0KSArIChtYXBbNF1bNF0gLSA2NCk7CglpbnQgdG1wNSA9IChtYXBbNF1bNF0gLSA2NCkgKyAobWFwWzNdWzVdIC0gNjQpICsgKG1hcFsyXVs2XSAtIDY0KSArIChtYXBbMV1bN10gLSA2NCk7CglpbnQgdG1wNiA9IChtYXBbMV1bN10gLSA2NCkgKyAobWFwWzFdWzVdIC0gNjQpICsgKG1hcFsxXVszXSAtIDY0KSArIChtYXBbMV1bMV0gLSA2NCk7CgoJaWYgKHRtcDEgIT0gMjYgfHwgdG1wMiAhPSAyNiB8fCB0bXAzICE9IDI2IHx8IHRtcDQgIT0gMjYgfHwgdG1wNSAhPSAyNiB8fCB0bXA2ICE9IDI2KSByZXR1cm4gMDsKCWVsc2UKCXsKCQljb21iaW5lWzBdID0gbWFwWzBdWzRdOwoJCWNvbWJpbmVbMV0gPSBtYXBbMV1bM107CgkJY29tYmluZVsyXSA9IG1hcFsyXVsyXTsKCQljb21iaW5lWzNdID0gbWFwWzNdWzFdOwoJCWNvbWJpbmVbNF0gPSBtYXBbM11bM107CgkJY29tYmluZVs1XSA9IG1hcFszXVs1XTsKCQljb21iaW5lWzZdID0gbWFwWzNdWzddOwoJCWNvbWJpbmVbN10gPSBtYXBbMl1bNl07CgkJY29tYmluZVs4XSA9IG1hcFsxXVs1XTsKCQljb21iaW5lWzldID0gbWFwWzFdWzJdOwoJCWNvbWJpbmVbMTBdID0gbWFwWzRdWzRdOwoJCWNvbWJpbmVbMTFdID0gbWFwWzFdWzddOwoKCQlyZXR1cm4gMTsKCX0KCQp9Cgp2b2lkIGNvbXBhcmUoKQp7CglpZiAoc3RyY21wKGNvbWJpbmUsIHJlc3VsdCkgPT0gLTEpCgl7CgkJc3RyY3B5KHJlc3VsdCwgY29tYmluZSk7Cgl9Cn0KCnZvaWQgc29sdmUoaW50IHBvcykKewoJaWYgKHBvcyA9PSBjbnQpCgl7CgkJaWYgKHZhbGlkYXRlKCkpCgkJewoJCQljb21wYXJlKCk7CgkJfQoKCQlyZXR1cm4gOwoJfQoJCglmb3IgKGludCBpID0gMTsgaSA8PSAxMjsgaSsrKQoJewoJCWlmIChjaGVja1tpXSA9PSAwKQoJCXsKCQkJY2hlY2tbaV0gPSAxOwoJCQltYXBbeXBvc1twb3NdXVt4cG9zW3Bvc11dID0gNjQgKyBpOwoJCQlzb2x2ZShwb3MgKyAxKTsKCQkJY2hlY2tbaV0gPSAwOwoJCX0KCX0KfQoKCmludCBtYWluKCkKewoJZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspCgl7CgkJZm9yIChpbnQgaiA9IDA7IGogPCA5OyBqKyspCgkJewoJCQljaW4gPj4gbWFwW2ldW2pdOwoJCQlpZiAobWFwW2ldW2pdID49ICdBJyAmJiBtYXBbaV1bal0gPD0gJ1onKQoJCQkJY2hlY2tbbWFwW2ldW2pdIC0gNjRdID0gMTsKCQkJaWYgKG1hcFtpXVtqXSA9PSAneCcpCgkJCXsKCQkJCXlwb3NbY250XSA9IGk7CgkJCQl4cG9zW2NudF0gPSBqOwoJCQkJY250Kys7CgkJCX0KCQl9Cgl9CgkKCXNvbHZlKDApOwoKCW1hcFswXVs0XSA9IHJlc3VsdFswXTsKCW1hcFsxXVszXSA9IHJlc3VsdFsxXTsKCW1hcFsyXVsyXSA9IHJlc3VsdFsyXTsKCW1hcFszXVsxXSA9IHJlc3VsdFszXTsKCW1hcFszXVszXSA9IHJlc3VsdFs0XTsKCW1hcFszXVs1XSA9IHJlc3VsdFs1XTsKCW1hcFszXVs3XSA9IHJlc3VsdFs2XTsKCW1hcFsyXVs2XSA9IHJlc3VsdFs3XTsKCW1hcFsxXVs1XSA9IHJlc3VsdFs4XTsKCW1hcFsxXVsyXSA9IHJlc3VsdFs5XTsKCW1hcFs0XVs0XSA9IHJlc3VsdFsxMF07CgltYXBbMV1bN10gPSByZXN1bHRbMTFdOwoKCWZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKQoJewoJCWZvciAoaW50IGogPSAwOyBqIDwgOTsgaisrKQoJCQljb3V0IDw8IG1hcFtpXVtqXTsKCQljb3V0IDw8ICJcbiI7Cgl9CgoJcmV0dXJuIDA7Cn0=