/* 1 */
#include <iostream>
#include <string.h>
#include <string>
#define f(i, n) for(int i = 0; i < (n); ++i)
using namespace std;
// original
char cb[2][6][3][3]; bool sd; // 초기화 완료
char clr[6] = { 'w', 'y', 'r', 'o', 'g', 'b' };
int dir['Z' + 1];
// turn
int src[6][2][4] = { // 기준 p(rotax), 회전방향 +-(rotdr), src p
{ { 5, 2, 4, 3 },{ 4, 3, 5, 2 } },
{ { 4, 3, 5, 2 },{ 5, 2, 4, 3 } },
{ { 4, 0, 5, 1 },{ 5, 1, 4, 0 } },
{ { 5, 1, 4, 0 },{ 4, 0, 5, 1 } },
{ { 3, 0, 2, 1 },{ 2, 1, 3, 0 } },
{ { 2, 1, 3, 0 },{ 3, 0, 2, 1 } },
};
int dst[6][2][4] = { // 기준 p(rotax), 회전방향 +-(rotdr), dst p
{ { 2, 4, 3, 5 },{ 2, 4, 3, 5 } },
{ { 2, 4, 3, 5 },{ 2, 4, 3, 5 } },
{ { 0, 5, 1, 4 },{ 0, 5, 1, 4 } },
{ { 0, 5, 1, 4 },{ 0, 5, 1, 4 } },
{ { 0, 2, 1, 3 },{ 0, 2, 1, 3 } },
{ { 0, 2, 1, 3 },{ 0, 2, 1, 3 } },
};
struct info {
bool b;
int i;
};
enum { R, C };
info cell[6][4] = { // 기준 p(rotax), r/c, 그 좌표값
{ { R, 0 },{ R, 0 },{ R, 0 },{ R, 0 } },
{ { R, 2 },{ R, 2 },{ R, 2 },{ R, 2 } },
{ { C, 2 },{ C, 2 },{ C, 2 },{ C, 2 } },
{ { C, 0 },{ C, 0 },{ C, 0 },{ C, 0 } },
{ { R, 0 },{ C, 0 },{ R, 0 },{ C, 0 } },
{ { R, 2 },{ C, 2 },{ R, 2 },{ C, 2 } }
};
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int d = 0;
for (char ch : {'U', 'D', 'F', 'B', 'L', 'R'})
dir[ch] = d++;
int T; cin >> T;
for (int tc = 1; tc <= T; ++tc) {
sd = 0;
f(p, 6) f(r, 3) f(c, 3) cb[sd][p][r][c] = clr[p];
int N; cin >> N;
while (N--) {
memcpy(cb[!sd], cb[sd], sizeof(char) * 6 * 3 * 3);
string in; cin >> in;
int rotax = dir[in[0]], rotdr = (in[1] == '-'); /* 1 */
f(p, 4) {
f(i, 3) {
if (cell[rotax][p].b == R) cb[!sd][dst[rotax][rotdr][p]][cell[rotax][p].i][i] = cb[sd][src[rotax][rotdr][p]][cell[rotax][p].i][i];
else cb[!sd][dst[rotax][rotdr][p]][i][cell[rotax][p].i] = cb[sd][src[rotax][rotdr][p]][i][cell[rotax][p].i];
}
}
sd = !sd;
}
f(r, 3) {
f(c, 3) cout << cb[sd][0][c][r];
cout << '\n';
}
}
return 0;
}
code/BOJ