#include //#include #include using namespace std; struct suradnica { public: int N; int X; int Y; }; suradnica RotLeftX(suradnica x, suradnica y) { suradnica ret; ret.N = 1 - y.N; ret.X = -y.X; ret.Y = -y.Y; return ret; } suradnica RotLeftY(suradnica x, suradnica y) { suradnica ret; ret.N = x.N; ret.X = x.X; ret.Y = x.Y; return ret; } suradnica RotRightX(suradnica x, suradnica y) { suradnica ret; ret.N = y.N; ret.X = y.X; ret.Y = y.Y; return ret; } suradnica RotRightY(suradnica x, suradnica y) { suradnica ret; ret.N = 1 - x.N; ret.X = -x.X; ret.Y = -x.Y; return ret; } suradnica FlipZvisleX(suradnica x, suradnica y) { return x; } suradnica FlipZvisleY(suradnica x, suradnica y) { suradnica ret; ret.N = 1 - y.N; ret.X = -y.X; ret.Y = -y.Y; return ret; } suradnica FlipVodoX(suradnica x, suradnica y) { suradnica ret; ret.N = 1 - x.N; ret.X = -x.X; ret.Y = -x.Y; return ret; } suradnica FlipVodoY(suradnica x, suradnica y) { return y; } suradnica FlipSecDX(suradnica x, suradnica y) { suradnica ret; ret.N = 1 - y.N; ret.X = -y.X; ret.Y = -y.Y; return ret; } suradnica FlipSecDY(suradnica x, suradnica y) { suradnica ret; ret.N = 1 - x.N; ret.X = -x.X; ret.Y = -x.Y; return ret; } suradnica FlipMainX(suradnica x, suradnica y) { return y; } suradnica FlipMainY(suradnica x, suradnica y) { return x; } char RotLeft(char x) { switch (x) { case '<': return 'v'; case '>': return '^'; case '^': return '<'; case 'v': return '>'; case '/': return '\\'; case '\\': return '/'; case '|': return '-'; case '-': return '|'; default: return x; } } char RotRight(char x) { switch (x) { case '<': return '^'; case '>': return 'v'; case '^': return '>'; case 'v': return '<'; case '/': return '\\'; case '\\': return '/'; case '|': return '-'; case '-': return '|'; default: return x; } } char FlipZvisla(char x) { switch (x) { case '<': return '>'; case '>': return '<'; case '^': return '^'; case 'v': return 'v'; case '/': return '\\'; case '\\': return '/'; case '|': return '|'; case '-': return '-'; default: return x; } } char FlipVodo(char x) { switch (x) { case '<': return '<'; case '>': return '>'; case '^': return 'v'; case 'v': return '^'; case '/': return '\\'; case '\\': return '/'; case '|': return '|'; case '-': return '-'; default: return x; } } char FlipMain(char x) { switch (x) { case '<': return '^'; case '>': return 'v'; case '^': return '<'; case 'v': return '>'; case '/': return '/'; case '\\': return '\\'; case '|': return '-'; case '-': return '|'; default: return x; } } char FlipSec(char x) { switch (x) { case '<': return 'v'; case '>': return '^'; case '^': return '>'; case 'v': return '<'; case '/': return '/'; case '\\': return '\\'; case '|': return '-'; case '-': return '|'; default: return x; } } int main() { static char riadok[2000005]; while (true) { int N = 0; scanf("%d\n", &N); if (N == 0) break; char display[100][100]; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { char znak; scanf("%c", &znak); display[i][j] = znak; } scanf("\n"); } suradnica xold, yold; suradnica xnew, ynew; xold.N = 0; xold.X = 1; xold.Y = 0; yold.N = 0; yold.X = 0; yold.Y = 1; char znaky[10]; znaky[0] = 'o'; znaky[1] = 'x'; znaky[2] = '|'; znaky[3] = '-'; znaky[4] = '<'; znaky[5] = '>'; znaky[6] = '^'; znaky[7] = 'v'; znaky[8] = '/'; znaky[9] = '\\'; char operacia; char medzera; fgets(riadok, 2000004, stdin); int iterator = 0; do { operacia = riadok[iterator]; iterator += 2; switch (operacia) { case '<': { xnew = RotLeftX(xold, yold); ynew = RotLeftY(xold, yold); for (int i = 0; i < 10; i++) znaky[i] = RotLeft(znaky[i]); }; break; case '>': { xnew = RotRightX(xold, yold); ynew = RotRightY(xold, yold); for (int i = 0; i < 10; i++) znaky[i] = RotRight(znaky[i]); }; break; case '-': { xnew = FlipVodoX(xold, yold); ynew = FlipVodoY(xold, yold); for (int i = 0; i < 10; i++) znaky[i] = FlipVodo(znaky[i]); }; break; case '|': { xnew = FlipZvisleX(xold, yold); ynew = FlipZvisleY(xold, yold); for (int i = 0; i < 10; i++) znaky[i] = FlipZvisla(znaky[i]); }; break; case '\\': { xnew = FlipMainX(xold, yold); ynew = FlipMainY(xold, yold); for (int i = 0; i < 10; i++) znaky[i] = FlipMain(znaky[i]); }; break; case '/': { xnew = FlipSecDX(xold, yold); ynew = FlipSecDY(xold, yold); for (int i = 0; i < 10; i++) znaky[i] = FlipSec(znaky[i]); }; break; } xold = xnew; yold = ynew; } while (riadok[iterator] != 0); char display2[100][100]; for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) { int surX = xnew.N * (N-1) + xnew.X * i + xnew.Y * j; int surY = ynew.N * (N-1) + ynew.X * i + ynew.Y * j; char znak = display[i][j]; switch (display[i][j]) { case 'o': znak = znaky[0]; break; case 'x': znak = znaky[1]; break; case '|': znak = znaky[2]; break; case '-': znak = znaky[3]; break; case '<': znak = znaky[4]; break; case '>': znak = znaky[5]; break; case '^': znak = znaky[6]; break; case 'v': znak = znaky[7]; break; case '/': znak = znaky[8]; break; case '\\': znak = znaky[9]; break; } display2[surX][surY] = znak; } for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { printf("%c", display2[i][j]); } printf("\n"); } } return 0; }