あなたの仕事は以下のようなゲームにおけるコマンド列を読み、その結果をゲームオーバーまでシミュレーションすることである。以下のようなm*nマスの2次元グリッドをタワーと呼ぶことにする。このゲームの目的は、タワー内のブロックを動かして、ゴールブロックの上に登ることである。ここで、下はじの行を1段目、上はじをn段目とする。左はじの列を1列目、右はじをm列目とする。
.................... (n=13段目) .....#.....G........ ....##.....##.....## ...####...IIII...### ..####.....##.....## ...####B..####....## ....###....#33##..## .....####...#33#3.## .##CCCC#####2##.#### ..#####..###.#...### ...###....###.....#1 ....####..##.......# S..###..#.####.....# (1段目)
マークの説明:
相対位置の説明:
123 4S5 678
以下の記述ではSに対して、左上とは1の場所、上とは2、右上とは3、左とは4、右とは5、左下とは6、下とは7、右下とは8をそれぞれ示す。
プレイヤーの動作:
プレイヤーはタワーの外に出てはならない。タワーの外は空白と考える。
プレイヤーの動作後に起きる自動動作:
次の順で自動動作が起きる。これはフィールドに変化があり続ける限り、繰り返し処理される。これが終わった後、プレイヤーは次の動作に入ることが出来る。
ゲームオーバーの条件:
プレイヤーの動作の直後、またはプレイヤーの動作の直前、以下の条件を満たした時点でゲームオーバーとなる。これらはこの順序で優先して判定される。ただし(E)はプレイヤーの動作の直後においては判定しない。
最後に、動作の例を挙げておく。各コマンドの詳細はInputに書かれている。
動作 | 動作前 | 動作後 | コマンド |
---|---|---|---|
移動 | .#S ### | S#. ### | MOVETO 1 |
上る | ... 3S# | S.. 3.# | CLIMB LEFT |
下りる | S.. 3.# | ... 2S# | GETDOWN RIGHT |
押す | .#S#####.. ###II.I.I. | .#S.####.# ###II.I.I. | PUSH RIGHT |
押す | .#SI... ###.### | .#S.... ###.### | PUSH RIGHT |
押す | .#...S# ###.### | .....S. ###.### | PUSH RIGHT |
引く | ..S#####.. ###.#.#.#. | .S#.####.. ###.#.#.#. | PULL LEFT |
プレイヤーの落下 | .#S# .#.# .#.# .#.# | .#.# .#.# .#.# .#S# | - |
ブロックの落下 | .###. #...# #...# #...# .#.# | .#.#. #...# #...# #.#.# .#.# | - |
入力は複数のデータセットで与えられる。ひとつのデータセットは次の形式で与えられる。
n m Dn,1 Dn,2 ... Dn,m Dn-1,1 Dn-1,2 ... Dn-1,m ... D1,1 D1,2 ... D1,m T Command1 Command2 ... CommandT
m,nはそれぞれタワーの幅と高さを示す。Di,j(1≤i≤n かつ 1≤j≤m) はタワーを構成するマークを示す。マークの説明は上記の問題文を参照して欲しい。Commandk(1≤k≤T) はプレイヤーのk番目の操作を示す。 これは以下のいずれかの文字列である。
"MOVETO s" 同じ段のs列目への移動を示す。 "PUSH RIGHT" 右にあるブロックを押すことを示す。 "PUSH LEFT" 左にあるブロックを押すことを示す。 "PULL RIGHT" 左にあるブロックを右に引くことを示す。 "PULL LEFT" 右にあるブロックを左に引くことを示す。 "GETDOWN RIGHT" 右下に下りることを示す。 "GETDOWN LEFT" 左下に下りることを示す。 "CLIMB RIGHT" 右上に上ることを示す。 "CLIMB LEFT" 左上に上ることを示す。
条件を満たさない、無効な操作が含まれることもある。これらは無視せよ。また、ゲームオーバー後(ゴールブロックに登った後)でも操作が続く場合がある。この場合、それらの余分な操作もすべて無視して欲しい。入力の終了を m=n=0 で示す。
3≤m≤50
3≤n≤50
タワー内に文字'S','G'は必ず一度だけ現れる。
ひとつのデータセットにつき、次の形式で一行にゲームの結果を出力せよ。
Result
ただし Result はゲームオーバーをあらわす次のいずれかの引用符内の文字列である。
8 8 ........ ........ ....###. ...#.#.G S#B...## #ICII.I# #..#.#.# .#..#.#. 7 PUSH RIGHT MOVETO 2 CLIMB RIGHT CLIMB RIGHT GETDOWN RIGHT CLIMB RIGHT GETDOWN RIGHT 8 8 ........ ........ ........ ...G.... S#B..... #ICIIIII #..#.#.# .#..#.#. 4 PUSH RIGHT MOVETO 2 CLIMB RIGHT CLIMB RIGHT 8 8 ........ ....#.#. .....#.G ...#..#. S#B....# #ICIII.# #..#.#.# .#..#.#. 8 PUSH RIGHT MOVETO 2 CLIMB RIGHT CLIMB RIGHT CLIMB RIGHT GETDOWN RIGHT CLIMB RIGHT GETDOWN RIGHT 0 0
Game Over : Death by Hole Game Over : Cleared Game Over : Death by Walking Goal