#include using namespace std; char left(char ch){ switch(ch){ case '<' : return 'v'; case '>' : return '^'; case '^' : return '<'; case 'v' : return '>'; case 'o' : return 'o'; case 'x' : return 'x'; case '|' : return '-'; case '-' : return '|'; case '/' : return '\\'; case '\\' : return '/'; } } char vert(char ch){ switch(ch){ case '<' : return '>'; case '>' : return '<'; case '^' : return '^'; case 'v' : return 'v'; case 'o' : return 'o'; case 'x' : return 'x'; case '|' : return '|'; case '-' : return '-'; case '/' : return '\\'; case '\\' : return '/'; } } char right(char ch){ return vert(left(ch)); } char diag(char ch){ switch(ch){ case '<' : return '^'; case '>' : return 'v'; case '^' : return '<'; case 'v' : return '>'; case 'o' : return 'o'; case 'x' : return 'x'; case '|' : return '-'; case '-' : return '|'; case '/' : return '/'; case '\\' : return '\\'; } } char antidiag(char ch){ switch(ch){ case '<' : return 'v'; case '>' : return '^'; case '^' : return '>'; case 'v' : return '<'; case 'o' : return 'o'; case 'x' : return 'x'; case '|' : return '-'; case '-' : return '|'; case '/' : return '/'; case '\\' : return '\\'; } } char horiz(char ch){ switch(ch){ case '<' : return '<'; case '>' : return '>'; case '^' : return 'v'; case 'v' : return '^'; case 'o' : return 'o'; case 'x' : return 'x'; case '|' : return '|'; case '-' : return '-'; case '/' : return '\\'; case '\\' : return '/'; } } // type (left, right, diag, antidiag, vert, horiz char rot(char type, char ch){ switch(type){ case '<': return left(ch); case '>': return right(ch); case '\\': return diag(ch); case '/': return antidiag(ch); case '|': return vert(ch); case '-': return horiz(ch); } } char A[110][110], B[110][110]; bool aactive = true; /*char *** A = realA, *** B = realB;*/ void apply(char A[110][110], char B[110][110], char op, int n){ switch(op){ case '<': { char tmp; for(int x = 0; x < n; x++){ for (int y = 0; y < n; y += 1) { B[n-1-y][x] = rot(op, A[x][y]); } } } break; case '>': { for(int x = 0; x < n; x++){ for (int y = 0; y < n; y += 1) { B[y][n-1-x] = rot(op, A[x][y]); } } } break; case '\\': { for(int x = 0; x < n; x++){ for (int y = 0; y < n; y += 1) { B[y][x] = rot(op, A[x][y]); } } } break; case '/': { for(int x = 0; x < n; x++){ for (int y = 0; y < n; y += 1) { B[n-1-x][n-1-y] = rot(op, A[x][y]); } } } break; case '|': { for(int x = 0; x < n; x++){ for (int y = 0; y < n; y += 1) { B[x][n-1-y] = rot(op, A[x][y]); } } } break; case '-': { for(int x = 0; x < n; x++){ for (int y = 0; y < n; y += 1) { B[n-1-x][y] = rot(op, A[x][y]); } } } break; } /* for( int i = 0; i < n; i ++) printf("%s\n", B[i]);//*/ } void process(int n){ for( int i = 0; i < n; i ++) scanf("%s ", A[i]); char op, dum = ' '; while(dum != 10){ scanf("%c%c", &op, &dum); if(aactive) apply(A,B, op, n); else apply(B,A, op, n); aactive = !aactive; } for( int i = 0; i < n; i ++) printf("%s\n", B[i]); } int main(){ int n; while(scanf("%d ", &n) == 1){ process(n); } }