#include <string>
#include <iostream>
using namespace std;
const int SIZE = 9;
const int BLOCK_SIZE = 3;
int constr_vert[SIZE][SIZE];
int constr_hor[SIZE][SIZE];
int field[SIZE][SIZE];
int free_hor[SIZE];
int free_vert[SIZE];
int free_block[SIZE / BLOCK_SIZE][SIZE / BLOCK_SIZE];
bool consistentPair(int x, int y, int sign) {
if (y < x) return sign <= 0;
if (x < y) return sign >= 0;
return true;
}
bool consistent(int x, int y, int num) {
bool res = true;
if (x > 0)
res &= consistentPair(field[x][y], field[x - 1][y], constr_hor[x][y]);
if (y > 0)
res &= consistentPair(field[x][y], field[x][y - 1], constr_vert[x][y]);
return res;
}
void printField() {
for (int i = 0; i < SIZE; ++i) {
for (int j = 0; j < SIZE; ++j) {
cout << (field[i][j] + 1) << " ";
}
cout << "\n";
}
}
void brute(int x, int y) {
if (x >= SIZE) {
printField();
return;
}
int nx = x, ny = y + 1;
if (ny >= SIZE) {
nx++, ny = 0;
}
for (int i = 0; i < 9; ++i) {
if ((free_hor[x] >> i) & 1) continue;
if ((free_vert[y] >> i) & 1) continue;
if ((free_block[x / BLOCK_SIZE][y / BLOCK_SIZE] >> i) & 1) continue;
field[x][y] = i;
if (!consistent(x, y, i)) continue;
free_hor[x] ^= (1 << i);
free_vert[y] ^= (1 << i);
free_block[x / BLOCK_SIZE][y / BLOCK_SIZE] ^= (1 << i);
brute(nx, ny);
free_hor[x] ^= (1 << i);
free_vert[y] ^= (1 << i);
free_block[x / BLOCK_SIZE][y / BLOCK_SIZE] ^= (1 << i);
}
}
int main() {
for (int i = 0; i < SIZE; ++i) {
string line;
cin >> line;
int y = 1;
for (int j = 0; j < line.size(); ++j) {
constr_vert[i][y] = (line[j] == '<' ? -1 : 1);
++y;
if (y % BLOCK_SIZE == 0) ++y;
}
}
for (int i = 0; i < SIZE; ++i) {
string line;
cin >> line;
int x = 1;
for (int j = 0; j < line.size(); ++j) {
constr_hor[x][i] = (line[j] == '<' ? -1 : 1);
++x;
if (x % BLOCK_SIZE == 0) ++x;
}
}
brute(0, 0);
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBTSVpFID0gOTsKY29uc3QgaW50IEJMT0NLX1NJWkUgPSAzOwoKaW50IGNvbnN0cl92ZXJ0W1NJWkVdW1NJWkVdOwppbnQgY29uc3RyX2hvcltTSVpFXVtTSVpFXTsKCmludCBmaWVsZFtTSVpFXVtTSVpFXTsKaW50IGZyZWVfaG9yW1NJWkVdOwppbnQgZnJlZV92ZXJ0W1NJWkVdOwppbnQgZnJlZV9ibG9ja1tTSVpFIC8gQkxPQ0tfU0laRV1bU0laRSAvIEJMT0NLX1NJWkVdOwoKYm9vbCBjb25zaXN0ZW50UGFpcihpbnQgeCwgaW50IHksIGludCBzaWduKSB7CiAgaWYgKHkgPCB4KSByZXR1cm4gc2lnbiA8PSAwOwogIGlmICh4IDwgeSkgcmV0dXJuIHNpZ24gPj0gMDsKICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBjb25zaXN0ZW50KGludCB4LCBpbnQgeSwgaW50IG51bSkgewogIGJvb2wgcmVzID0gdHJ1ZTsKICBpZiAoeCA+IDApCiAgICByZXMgJj0gY29uc2lzdGVudFBhaXIoZmllbGRbeF1beV0sIGZpZWxkW3ggLSAxXVt5XSwgY29uc3RyX2hvclt4XVt5XSk7CiAgaWYgKHkgPiAwKQogICAgcmVzICY9IGNvbnNpc3RlbnRQYWlyKGZpZWxkW3hdW3ldLCBmaWVsZFt4XVt5IC0gMV0sIGNvbnN0cl92ZXJ0W3hdW3ldKTsKCiAgcmV0dXJuIHJlczsKfQoKdm9pZCBwcmludEZpZWxkKCkgewogIGZvciAoaW50IGkgPSAwOyBpIDwgU0laRTsgKytpKSB7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IFNJWkU7ICsraikgewogICAgICBjb3V0IDw8IChmaWVsZFtpXVtqXSArIDEpIDw8ICIgIjsKICAgIH0KICAgIGNvdXQgPDwgIlxuIjsKICB9Cn0KCnZvaWQgYnJ1dGUoaW50IHgsIGludCB5KSB7CiAgaWYgKHggPj0gU0laRSkgewogICAgcHJpbnRGaWVsZCgpOwogICAgcmV0dXJuOwogIH0KCiAgaW50IG54ID0geCwgbnkgPSB5ICsgMTsKICBpZiAobnkgPj0gU0laRSkgewogICAgbngrKywgbnkgPSAwOwogIH0KCiAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OyArK2kpIHsKICAgIGlmICgoZnJlZV9ob3JbeF0gPj4gaSkgJiAxKSBjb250aW51ZTsKICAgIGlmICgoZnJlZV92ZXJ0W3ldID4+IGkpICYgMSkgY29udGludWU7CiAgICBpZiAoKGZyZWVfYmxvY2tbeCAvIEJMT0NLX1NJWkVdW3kgLyBCTE9DS19TSVpFXSA+PiBpKSAmIDEpIGNvbnRpbnVlOwogICAgZmllbGRbeF1beV0gPSBpOwogICAgaWYgKCFjb25zaXN0ZW50KHgsIHksIGkpKSBjb250aW51ZTsKCiAgICBmcmVlX2hvclt4XSBePSAoMSA8PCBpKTsKICAgIGZyZWVfdmVydFt5XSBePSAoMSA8PCBpKTsKICAgIGZyZWVfYmxvY2tbeCAvIEJMT0NLX1NJWkVdW3kgLyBCTE9DS19TSVpFXSBePSAoMSA8PCBpKTsKICAgIGJydXRlKG54LCBueSk7CiAgICBmcmVlX2hvclt4XSBePSAoMSA8PCBpKTsKICAgIGZyZWVfdmVydFt5XSBePSAoMSA8PCBpKTsKICAgIGZyZWVfYmxvY2tbeCAvIEJMT0NLX1NJWkVdW3kgLyBCTE9DS19TSVpFXSBePSAoMSA8PCBpKTsKICB9Cn0KCmludCBtYWluKCkgewogIGZvciAoaW50IGkgPSAwOyBpIDwgU0laRTsgKytpKSB7CiAgICBzdHJpbmcgbGluZTsKICAgIGNpbiA+PiBsaW5lOwogICAgaW50IHkgPSAxOwogICAgZm9yIChpbnQgaiA9IDA7IGogPCBsaW5lLnNpemUoKTsgKytqKSB7CiAgICAgIGNvbnN0cl92ZXJ0W2ldW3ldID0gKGxpbmVbal0gPT0gJzwnID8gLTEgOiAxKTsKICAgICAgKyt5OwogICAgICBpZiAoeSAlIEJMT0NLX1NJWkUgPT0gMCkgKyt5OwogICAgfQogIH0KICBmb3IgKGludCBpID0gMDsgaSA8IFNJWkU7ICsraSkgewogICAgc3RyaW5nIGxpbmU7CiAgICBjaW4gPj4gbGluZTsKICAgIGludCB4ID0gMTsKICAgIGZvciAoaW50IGogPSAwOyBqIDwgbGluZS5zaXplKCk7ICsraikgewogICAgICBjb25zdHJfaG9yW3hdW2ldID0gKGxpbmVbal0gPT0gJzwnID8gLTEgOiAxKTsKICAgICAgKyt4OwogICAgICBpZiAoeCAlIEJMT0NLX1NJWkUgPT0gMCkgKyt4OwogICAgfQogIH0KICBicnV0ZSgwLCAwKTsKICByZXR1cm4gMDsKfQ==
Jmd0OyZsdDsmZ3Q7Jmx0OyZsdDsmZ3Q7CiZndDsmbHQ7Jmx0OyZsdDsmZ3Q7Jmd0OwombHQ7Jmd0OyZsdDsmZ3Q7Jmd0OyZsdDsKJmd0OyZsdDsmZ3Q7Jmx0OyZsdDsmbHQ7CiZsdDsmbHQ7Jmx0OyZndDsmZ3Q7Jmx0OwomZ3Q7Jmd0OyZndDsmbHQ7Jmx0OyZndDsKJmd0OyZndDsmbHQ7Jmd0OyZndDsmbHQ7CiZsdDsmZ3Q7Jmx0OyZndDsmbHQ7Jmd0OwombHQ7Jmd0OyZndDsmbHQ7Jmx0OyZndDsKCiZsdDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmx0OwomZ3Q7Jmx0OyZsdDsmZ3Q7Jmx0OyZsdDsKJmx0OyZsdDsmbHQ7Jmd0OyZndDsmbHQ7CiZndDsmbHQ7Jmd0OyZsdDsmbHQ7Jmd0OwomZ3Q7Jmx0OyZsdDsmZ3Q7Jmx0OyZndDsKJmx0OyZndDsmZ3Q7Jmx0OyZsdDsmbHQ7CiZsdDsmbHQ7Jmx0OyZndDsmZ3Q7Jmd0OwombHQ7Jmd0OyZndDsmbHQ7Jmx0OyZndDsKJmx0OyZsdDsmZ3Q7Jmx0OyZndDsmZ3Q7Cg==
><><<>
><<<>>
<><>><
><><<<
<<<>><
>>><<>
>><>><
<><><>
<>><<>
<>>>><
><<><<
<<<>><
><><<>
><<><>
<>><<<
<<<>>>
<>><<>
<<><>>