008 - ルービックキューブ
時間制限 1 秒 / メモリ制限 256 MB / 得点 10 / x 0 /
問題
ルービックキューブは、図のように表面に色のついた27個の立方体から構成されている立体パズルである。以下の図では、説明のためにルービックキューブの各面にアルファベットが書かれている。同じ文字は同じ色を表す。
|
|
| $x>0,y>0,z>0$方向から見たとき | $x<0,y<0,z<0$方向から見たとき |
ルービックキューブでは、1回の操作で、x軸、y軸、またはz軸に垂直な同一平面上にある9つの立方体を選んで、90度回転させることができる。具体的には、以下の図のような操作方法だけが許されている。ただし、説明のために、以下のすべての操作を始める前には上の図のような状態だとする。
| 操作方法 | 操作の説明 | 操作時の状態 | 操作後の状態 |
| 1 | x軸方向の負の側にある立方体9つを右図のようにx軸周りに90度回転させる |
|
|
| 2 | x軸方向の負の側にある立方体9つを右図のようにx軸周りに90度回転させる |
|
|
| 3 | x軸方向の中間にある立方体9つを右図のようにx軸周りに90度回転させる |
|
|
| 4 | x軸方向の中間にある立方体9つを右図のようにx軸周りに90度回転させる |
|
|
| 5 | x軸方向の正の側にある立方体9つを右図のようにx軸周りに90度回転させる |
|
|
| 6 | x軸方向の正の側にある立方体9つを右図のようにx軸周りに90度回転させる |
|
|
| 7 | y軸方向の負の側にある立方体9つを右図のようにy軸周りに90度回転させる |
|
|
| 8 | y軸方向の負の側にある立方体9つを右図のようにy軸周りに90度回転させる |
|
|
| 9 | y軸方向の中間にある立方体9つを右図のようにy軸周りに90度回転させる |
|
|
| 10 | y軸方向の中間にある立方体9つを右図のようにy軸周りに90度回転させる |
|
|
| 11 | y軸方向の正の側にある立方体9つを右図のようにy軸周りに90度回転させる |
|
|
| 12 | y軸方向の正の側にある立方体9つを右図のようにy軸周りに90度回転させる |
|
|
| 13 | z軸方向の負の側にある立方体9つを右図のようにz軸周りに90度回転させる |
|
|
| 14 | z軸方向の負の側にある立方体9つを右図のようにz軸周りに90度回転させる |
|
|
| 15 | z軸方向の中間にある立方体9つを右図のようにz軸周りに90度回転させる |
|
|
| 16 | z軸方向の中間にある立方体9つを右図のようにz軸周りに90度回転させる |
|
|
| 17 | z軸方向の正の側にある立方体9つを右図のようにz軸周りに90度回転させる |
|
|
| 18 | z軸方向の正の側にある立方体9つを右図のようにz軸周りに90度回転させる |
|
|
ルービックキューブの操作をシミュレーションしてみよう。
現在のルービックキューブの各面の状態と、そこからルービックキューブに対して行う操作が与えられる。操作がすべて終わった後の、ルービックキューブの各面の状態を求めるプログラムを作成せよ。
入力
入力は以下の形式で与えられる。
$f_1$ $f_2$ $f_3$ $f_4$ $f_5$ $f_6$ $f_7$ $f_8$ $f_9$
$f_{10}$ $f_{11}$ $f_{12}$ $f_{13}$ $f_{14}$ $f_{15}$ $f_{16}$ $f_{17}$ $f_{18}$
$f_{19}$ $f_{20}$ $f_{21}$ $f_{22}$ $f_{23}$ $f_{24}$ $f_{25}$ $f_{26}$ $f_{27}$
$f_{28}$ $f_{29}$ $f_{30}$ $f_{31}$ $f_{32}$ $f_{33}$ $f_{34}$ $f_{35}$ $f_{36}$
$f_{37}$ $f_{38}$ $f_{39}$ $f_{40}$ $f_{41}$ $f_{42}$ $f_{43}$ $f_{44}$ $f_{45}$
$f_{46}$ $f_{47}$ $f_{48}$ $f_{49}$ $f_{50}$ $f_{51}$ $f_{52}$ $f_{53}$ $f_{54}$
$Q$
$p_1$
$p_2$
$:$
$p_Q$
最初の6行に、現在のルービックキューブの各面の色を表す文字$f_i$ ($f_i$ はA,B,C,D,E,またはF)が与えられる。$f_i$は、下図のように、ルービックキューブの各面に番号$i$を振ったときの面の色を表す。
|
|
| $x>0,y>0,z>0$方向から見たとき | $x<0,y<0,z<0$方向から見たとき |
続く1行に、ルービックキューブに対して行う操作の数$Q$ ($1 \leq Q \leq 100$)が与えられる。続く$Q$行に、$i$番目の操作$p_i$ ($1 \leq p_i \leq 18$)が与えられる。$p_i$は、何番目の操作方法でルービックキューブを操作するかを表す。たとえば、$p_1$が5なら、最初に行う操作が操作方法5であることを表す。
出力
すべての操作が終わった後のルービックキューブの面の色を表す文字を、入力でルービックキューブの面の色を与えたときと同じ形式で6行に出力する。
入出力例
入力例1
A A A A A A A A A B B B B B B B B B C C C C C C C C C D D D D D D D D D E E E E E E E E E F F F F F F F F F 1 1
出力例1
A A A A A A A A A B B B B B B B B B F C C F C C F C C E D D E D D E D D C E E C E E C E E D F F D F F D F F
入力例2
A A A A A A A A A B B B B B B B B B F C C F C C F C C E D D E D D E D D C E E C E E C E E D F F D F F D F F 2 7 13
出力例2
E D D E A A C A A C C C F B B D B B A A E C C C F F F B B F E D D E D D C C B E E B E E B A A A D F F D F F