#include #define REP(A,B) for(int (A)=0;(A)<(B);(A)++) #define ll long long char tbl[222][222]; char T[256][256]; char state[256]; char S[3][3]; char res[256][256]; char S2[3][3]; const char* OPS = "v^>') { rotleft(); rotleft(); rotleft(); } if(op=='|') { REP(i, 2) REP(j, 2) S2[i][j] = S[i][1-j]; REP(i, 2) REP(j, 2) S[i][j] = S2[i][j]; } if(op=='-') { REP(i, 2) REP(j, 2) S2[i][j] = S[1-i][j]; REP(i, 2) REP(j, 2) S[i][j] = S2[i][j]; } if(op=='/') { S2[0][0] = S[1][1]; S2[0][1] = S[0][1]; S2[1][0] = S[1][0]; S2[1][1] = S[0][0]; REP(i, 2) REP(j, 2) S[i][j] = S2[i][j]; } if(op=='\\') { REP(i, 2) REP(j, 2) S2[i][j] = S[j][i]; REP(i, 2) REP(j, 2) S[i][j] = S2[i][j]; } } int main() { int n; while(scanf("%d\n", &n)==1) { REP(i, 256) REP(j, 256) T[i][j] = i; REP(i, 256) state[i] = i; T['^']['<'] = '<'; T['^']['>'] = '>'; T['^']['-'] = 'v'; T['^']['/'] = '>'; T['^']['\\'] = '<'; T['<']['<'] = 'v'; T['<']['>'] = '^'; T['<']['|'] = '>'; T['<']['/'] = 'v'; T['<']['\\'] = '^'; T['v']['<'] = '>'; T['v']['>'] = '<'; T['v']['-'] = '^'; T['v']['/'] = '<'; T['v']['\\'] = '>'; T['>']['<'] = '^'; T['>']['>'] = 'v'; T['>']['|'] = '<'; T['>']['/'] = '^'; T['>']['\\'] = 'v'; T['-']['<'] = '|'; T['-']['>'] = '|'; T['-']['|'] = '-'; T['-']['-'] = '-'; T['-']['/'] = '|'; T['-']['\\'] = '|'; T['|']['<'] = '-'; T['|']['>'] = '-'; T['|']['|'] = '|'; T['|']['-'] = '|'; T['|']['/'] = '-'; T['|']['\\'] = '-'; T['/']['<'] = '\\'; T['/']['>'] = '\\'; T['/']['|'] = '\\'; T['/']['-'] = '\\'; T['/']['/'] = '/'; T['/']['\\'] = '/'; T['\\']['<'] = '/'; T['\\']['>'] = '/'; T['\\']['|'] = '/'; T['\\']['-'] = '/'; T['\\']['/'] = '\\'; T['\\']['\\'] = '\\'; REP(i, n) scanf("%s\n", tbl[i]); S[0][0]='A';S[0][1]='B'; S[1][0]='C';S[1][1]='D'; char op; while(scanf("%c", &op) == 1) { if(op == '\n') { break; } REP(i, 8) if(OPS[i]==op) { REP(j, 8) state[OPS[j]] = T[state[OPS[j]]][op]; transformS(op); //REP(i, 2) { REP(j, 2) printf("%c", S[i][j]); printf("\n"); } break; } } int Ai, Aj,Bi,Bj,Ci,Cj; REP(i, 2) REP(j, 2) if(S[i][j]=='A') { Ai = i; Aj = j; } else if(S[i][j]=='B') { Bi=i; Bj=j; } else if(S[i][j]=='C') { Ci=i; Cj = j; } int dci = Bi-Ai, dcj = Bj-Aj; int dri = Ci-Ai, drj = Cj-Aj; //REP(i, 2) { REP(j, 2) printf("%c", S[i][j]); printf("\n"); } int i=Ai*(n-1), j = Aj*(n-1); REP(row, n) { if(dci) i = Ai*(n-1); else j = Aj*(n-1); REP(col, n) { res[i][j] = state[tbl[row][col]]; // printf("%c [%d %d]", state[tbl[i][j]], i, j); i += dci; j += dcj; } //printf("\n"); i += dri; j += drj; } REP(row, n) { REP(col, n) printf("%c", res[row][col]); printf("\n"); } //printf("\n"); } return 0; }