// Latinski kvadrat
#include <iostream>
using namespace std;
int latinski_kvadrat[6][6];
int n;
bool moze_broj(int red, int kolona, int broj)
{
for (int x = 0; x < n; x++)
if (latinski_kvadrat[red][x] == broj or latinski_kvadrat[x][kolona] == broj)
return false;
return true;
}
void resi(int red, int kolona)
{
if (red == n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << latinski_kvadrat[i][j];
cout << endl;
}
cout << endl;
return;
}
int sledeci_red = red;
if (kolona == n - 1)
sledeci_red++;
int sledeca_kolona;
if (kolona == n - 1)
sledeca_kolona = 0;
else
sledeca_kolona = kolona + 1;
if (latinski_kvadrat[red][kolona] != 0)
resi(sledeci_red, sledeca_kolona);
else
for (int broj = 1; broj <= n; broj++)
if (moze_broj(red, kolona, broj))
{
latinski_kvadrat[red][kolona] = broj;
resi(sledeci_red, sledeca_kolona);
latinski_kvadrat[red][kolona] = 0;
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
string linija;
cin >> linija;
for (int j = 0; j < n; j++)
latinski_kvadrat[i][j] = linija[j] - '0';
}
resi(0, 0);
return 0;
}
Ly8gTGF0aW5za2kga3ZhZHJhdAojaW5jbHVkZSA8aW9zdHJlYW0+CiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAppbnQgbGF0aW5za2lfa3ZhZHJhdFs2XVs2XTsKaW50IG47CiAKYm9vbCBtb3plX2Jyb2ooaW50IHJlZCwgaW50IGtvbG9uYSwgaW50IGJyb2opCnsKICAgIGZvciAoaW50IHggPSAwOyB4IDwgbjsgeCsrKQogICAgICAgIGlmIChsYXRpbnNraV9rdmFkcmF0W3JlZF1beF0gPT0gYnJvaiBvciBsYXRpbnNraV9rdmFkcmF0W3hdW2tvbG9uYV0gPT0gYnJvaikKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7Cn0KIAp2b2lkIHJlc2koaW50IHJlZCwgaW50IGtvbG9uYSkKewogICAgaWYgKHJlZCA9PSBuKQogICAgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuOyBqKyspCiAgICAgICAgICAgICAgICBjb3V0IDw8IGxhdGluc2tpX2t2YWRyYXRbaV1bal07CiAgICAgICAgICAgIGNvdXQgPDwgZW5kbDsKICAgICAgICB9CiAgICAgICAgY291dCA8PCBlbmRsOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBzbGVkZWNpX3JlZCA9IHJlZDsKICAgIGlmIChrb2xvbmEgPT0gbiAtIDEpCiAgICAgICAgc2xlZGVjaV9yZWQrKzsKICAgIGludCBzbGVkZWNhX2tvbG9uYTsKICAgIGlmIChrb2xvbmEgPT0gbiAtIDEpCiAgICAgICAgc2xlZGVjYV9rb2xvbmEgPSAwOwogICAgZWxzZQogICAgICAgIHNsZWRlY2Ffa29sb25hID0ga29sb25hICsgMTsKICAgIGlmIChsYXRpbnNraV9rdmFkcmF0W3JlZF1ba29sb25hXSAhPSAwKQogICAgICAgIHJlc2koc2xlZGVjaV9yZWQsIHNsZWRlY2Ffa29sb25hKTsKICAgIGVsc2UKICAgICAgICBmb3IgKGludCBicm9qID0gMTsgYnJvaiA8PSBuOyBicm9qKyspCiAgICAgICAgICAgIGlmIChtb3plX2Jyb2oocmVkLCBrb2xvbmEsIGJyb2opKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBsYXRpbnNraV9rdmFkcmF0W3JlZF1ba29sb25hXSA9IGJyb2o7CiAgICAgICAgICAgICAgICByZXNpKHNsZWRlY2lfcmVkLCBzbGVkZWNhX2tvbG9uYSk7CiAgICAgICAgICAgICAgICBsYXRpbnNraV9rdmFkcmF0W3JlZF1ba29sb25hXSA9IDA7CiAgICAgICAgICAgIH0KfQogCmludCBtYWluKCkKewogICAgY2luID4+IG47CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgIHsKICAgIAlzdHJpbmcgbGluaWphOwogICAgCWNpbiA+PiBsaW5pamE7CiAgICAJZm9yIChpbnQgaiA9IDA7IGogPCBuOyBqKyspCiAgICAgICAgICAgIGxhdGluc2tpX2t2YWRyYXRbaV1bal0gPSBsaW5pamFbal0gLSAnMCc7CiAgICB9CiAgICByZXNpKDAsIDApOwogICAgcmV0dXJuIDA7Cn0=