#include using namespace std; #define REP(i,n) for (int i = 0; i < (n); ++i) #define FOR(i,a,b) for (int i = (a); i <= (b); ++i) #define FORD(i,a,b) for (int i = (a); i >= (b); --i) #define pii pair #define mp make_pair #define X first #define Y second int n; char arr[105][105]; char arr2[105][105]; map char_to_op; pii apply(pii op, pii on) { REP(k, 4) { if (op == mp(k, 0)) return mp((on.X + k) % 4, on.Y); } if (op == mp(0, 1)) return mp((4 - on.X) % 4, 1 - on.Y); return apply(mp(op.X, 0), apply(mp(0, 1), on)); } char rotate_by_one(char ch) { vector> chs = {{'-', '|'}, {'\\', '/'}, {'<', '^', '>', 'v'}}; REP(k, (int)chs.size()) { REP(i, (int)chs[k].size()) { if (chs[k][i] == ch) return chs[k][(i + 1) % ((int)chs[k].size())]; } } return ch; } char flip(char ch) { vector> chs = {{'\\', '/'}, {'<', '>'}}; REP(k, (int)chs.size()) { REP(i, (int)chs[k].size()) { if (chs[k][i] == ch) return chs[k][(i + 1) % ((int)chs[k].size())]; } } return ch; } void apply_on_board(pii op) { if (op == mp(1, 0) || op == mp(0, 1)) { REP(i, n) REP(j, n) { if (op == mp(1, 0)) { arr2[j][n-i-1] = rotate_by_one(arr[i][j]); } else { arr2[i][n-j-1] = flip(arr[i][j]); } } REP(i, n) REP(j, n) { arr[i][j] = arr2[i][j]; } return; } REP(k, 4) { if (op == mp(k, 0)) { REP(i, k) apply_on_board(mp(1,0)); return; } } apply_on_board(mp(0, 1)); apply_on_board(mp(op.X, 0)); } int main() { char_to_op['>'] = mp(1, 0); char_to_op['<'] = mp(3, 0); char_to_op['|'] = mp(0, 1); char_to_op['/'] = mp(1, 1); char_to_op['-'] = mp(2, 1); char_to_op['\\'] = mp(3, 1); while (scanf("%d ", &n) == 1) { REP(i, n) scanf("%s ", arr[i]); // apply_on_board(mp(1, 0)); // REP(i, n) printf("%s\n", arr[i]); // return 0; char ch; char next_op; scanf("%c", &next_op); // printf("%c\n", next_op); pii current_op = mp(0, 0); while (scanf("%c", &ch) == 1 && ch != '\n' && ch != EOF) { current_op = apply(char_to_op[next_op], current_op); scanf("%c", &next_op); // printf("%c\n", next_op); } current_op = apply(char_to_op[next_op], current_op); // printf("%d %d\n", current_op.X, current_op.Y); apply_on_board(current_op); REP(i, n) printf("%s\n", arr[i]); } return 0; }