#include #include #include #include #include int n; char field[101][101]; char field2[101][101]; char command[1000001]; char table[][7] = { "v^<>^v", "^v>v^<>", "><^v><", "oooooo", "xxxxxx", "--||--", "||--||", "\\\\\\\\//", "////\\\\", }; char apply(char chr, int c) { const char* chars = "<>^vox|-/\\"; //if (!strchr(chars, chr)) printf("!!!!!%c\n",chr); int c_idx = strchr(chars, chr) - chars; return table[c_idx][c]; }; void exec(char cmd) { const char* commands = "<>-|\\/"; //printf("exec %c %p %d\n",cmd,strchr(commands, cmd), strchr(commands, cmd) - commands); int c = strchr(commands, cmd) - commands; for (int x = 0; x < n; x++) for (int y = 0; y < n; y++) field[y][x] = apply(field[y][x], c); for (int y = 0; y < n; y++) { for (int x = 0; x < n; x++) { char nw = '#';//printf("%d %d\n", x, y); switch (cmd) { case '<': nw = field[x][n - y - 1]; break; case '>': nw = field[n - x - 1][y]; break; case '-': nw = field[n - y - 1][x]; break; case '|': nw = field[y][n - x - 1]; break; case '\\': nw = field[x][y]; break; case '/': nw = field[n - x - 1][n - y - 1]; break; } field2[y][x] = nw; } } //printf("wtf\n"); memcpy(field, field2, sizeof(field)); } int main() { while (scanf("%d", &n) > 0) { for (int i = 0; i < n; i++) scanf("%s", field[i]); fgets(command, sizeof(command), stdin); fgets(command, sizeof(command), stdin); for (int i = 0; command[i]; i++) if (command[i] > ' ') exec(command[i]); for (int i = 0; i < n; i++) printf("%s\n", field[i]); } }