#include using namespace std; int cmprot(const int a[4], const int b[4]) { return a[0] == b[0] && a[1] == b[1] && a[2] == b[2] && a[3] == b[3]; } void solve(int n) { string data[n]; for (int i = 0; i < n; ++i) { cin >> data[i]; } int x; int rot[] = {0,1,2,3}; string rots; //cin >> rots; getline(cin, rots); getline(cin, rots); int l = rots.length(); for (int i = 0; i < l; ++++i) { switch(rots[i]) { case '<': x = rot[0]; rot[0] = rot[1]; rot[1] = rot[2]; rot[2] = rot[3]; rot[3] = x; break; case '>': x = rot[3]; rot[3] = rot[2]; rot[2] = rot[1]; rot[1] = rot[0]; rot[0] = x; break; case '-': x = rot[0]; rot[0] = rot[3]; rot[3] = x; x = rot[1]; rot[1] = rot[2]; rot[2] = x; break; case '|': x = rot[0]; rot[0] = rot[1]; rot[1] = x; x = rot[2]; rot[2] = rot[3]; rot[3] = x; break; case '\\': x = rot[1]; rot[1] = rot[3]; rot[3] = x; break; case '/': x = rot[0]; rot[0] = rot[2]; rot[2] = x; break; default: break; } } int triv = 0; int tmp1[] = {0,1,2,3}; char out[n][n]; if (cmprot(rot,tmp1)) { for (int i = 0; i < 0; ++i) { cout << data[i] << endl; } triv = 1; } int tmp2[] = {3,0,1,2} ; if (cmprot(rot, tmp2)) { unordered_map m = { {'<', '^'}, {'>', 'v'}, {'^', '>'}, {'v', '<'}, {'o', 'o'}, {'x', 'x'}, {'|', '-'}, {'-', '|'}, {'/', '\\'}, {'\\', '/'} }; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { out[i][j] = m[data[j][n-i-1]]; } } } int tmp3[] = {1,2,3,0}; if (cmprot(rot, tmp3)) { unordered_map m = { {'^', '<'}, {'v', '>'}, {'>', '^'}, {'<', 'v'}, {'o', 'o'}, {'x', 'x'}, {'|', '-'}, {'-', '|'}, {'/', '\\'}, {'\\', '/'} }; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { out[i][j] = m[data[n-j-1][i]]; } } } int tmp4[] = {2,3,0,1}; if (cmprot(rot, tmp4)) { unordered_map m = { {'<', '>'}, {'>', '<'}, {'^', 'v'}, {'v', '^'}, {'o', 'o'}, {'x', 'x'}, {'|', '|'}, {'-', '-'}, {'/', '/'}, {'\\', '\\'} }; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { out[i][j] = m[data[n-i-1][n-j-1]]; } } } int tmp5[] = {3,2,0,1}; if (cmprot(rot, tmp5)) { unordered_map m = { {'<', '<'}, {'>', '>'}, {'^', 'v'}, {'v', '^'}, {'o', 'o'}, {'x', 'x'}, {'|', '|'}, {'-', '-'}, {'/', '\\'}, {'\\', '/'} }; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { out[i][j] = m[data[n-i-1][j]]; } } } int tmp6[] = {0,3,2,1}; if (cmprot(rot, tmp6)) { unordered_map m = { {'<', '^'}, {'>', 'v'}, {'^', '<'}, {'v', '>'}, {'o', 'o'}, {'x', 'x'}, {'|', '-'}, {'-', '|'}, {'/', '/'}, {'\\', '\\'} }; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { out[i][j] = m[data[j][i]]; } } } int tmp7[] = {1,0,2,3}; if (cmprot(rot, tmp7)) { unordered_map m = { {'<', '>'}, {'>', '<'}, {'^', '^'}, {'v', 'v'}, {'o', 'o'}, {'x', 'x'}, {'|', '|'}, {'-', '-'}, {'/', '\\'}, {'\\', '/'} }; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { out[i][j] = m[data[i][n-j-1]]; } } } int tmp8[] = {2,1,0,3}; if (cmprot(rot, tmp8)) { unordered_map m = { {'<', 'v'}, {'>', '^'}, {'^', '>'}, {'v', '<'}, {'o', 'o'}, {'x', 'x'}, {'|', '-'}, {'-', '|'}, {'/', '/'}, {'\\', '\\'} }; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { out[i][j] = m[data[n-j-1][n-i-1]]; } } } if (!triv) { for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) cout << out[i][j]; cout << endl; } } } int main(){ int n; while (cin >> n){ solve(n); } }