時間制限 : sec, メモリ制限 : KB
English / Japanese  

Problem L: The Tower

あなたの仕事は以下のようなゲームにおけるコマンド列を読み、その結果をゲームオーバーまでシミュレーションすることである。以下のようなm*nマスの2次元グリッドをタワーと呼ぶことにする。このゲームの目的は、タワー内のブロックを動かして、ゴールブロックの上に登ることである。ここで、下はじの行を1段目、上はじをn段目とする。左はじの列を1列目、右はじをm列目とする。

.................... (n=13段目)
.....#.....G........
....##.....##.....##
...####...IIII...###
..####.....##.....##
...####B..####....##
....###....#33##..##
.....####...#33#3.##
.##CCCC#####2##.####
..#####..###.#...###
...###....###.....#1
....####..##.......#
S..###..#.####.....# (1段目)

マークの説明:

  • '#' : 通常ブロック
    通常のブロック。
  • 'I' : 氷ブロック
    氷でできたブロックを示す。通常ブロックとは異なり特殊な性質をもつ。
  • 'G' : ゴールブロック
    この上にのると、ゲームオーバーでクリアとなる。
  • 'C' : 固定ブロック
    プレイヤーが直接は移動させることが出来ないブロックを示す。
  • 'B' : 異次元ブロック
    この上に乗るとゲームオーバーとなる。
  • '.' : 空白
    何も無いマスを示す。
  • '3' : 脆いブロック(3)
    カウントが3の脆いブロック。
  • '2' : 脆いブロック(2)
    カウントが2の脆いブロック。
  • '1' : 脆いブロック(1)
    カウントが1の脆いブロック。さらにカウントが0になった場合、空白になる。
  • 'S' : プレイヤー
    プレイヤーを示す。

相対位置の説明:

123
4S5
678

以下の記述ではSに対して、左上とは1の場所、上とは2、右上とは3、左とは4、右とは5、左下とは6、下とは7、右下とは8をそれぞれ示す。

プレイヤーの動作:
プレイヤーはタワーの外に出てはならない。タワーの外は空白と考える。

  • 移動
    プレイヤーは次のいずれかの条件を満たせば、同じ段内のどこへでも移動できる。
    • 1段目におり、移動後のマスが空白になっている。
    • 移動前と移動後を結ぶ経路(水平線分)のひとつひとつのマスにおいてその下にブロックがあり、移動後のマスが空白になっている。このとき経路の途中にブロックがあっても構わない。また経路の下に異次元ブロックがある場合でもゲームオーバーになることはない。
  • 上る
    プレイヤーは最上段より下の段にいるときで、右(左)にブロックが隣接しており、なおかつプレイヤーの上、および右上(左上)が空白であれば右上(左上)に移動することができる。
  • 下りる
    プレイヤーは2段目以上にいるときで、右下か左下に下りることができる。下りたい方向が右(左)の場合、右下(左下)と右(左)にブロックが無ければ、右下(左下)に移動することが出来る。
  • 押す
    プレイヤーは右か左に1つのブロックまたは連なっているブロックがあればそれをその方向に1マス押すことが出来る。連なっているとは、2つ以上のブロックがありそれらの間に空白がひとつもないことを指す。ただし、その中に固定ブロックがある場合や、押そうとしているブロックが固定ブロックである場合は押すことが出来ない。押されたブロックはタワーの端でとまることはない。タワーからはみ出たブロックは消滅する。押された結果、氷のブロックの上に移動したブロックはその下が氷のブロックではなくなるか、押された方向に空白がなくなるか、あるいは消滅するまでその方向に移動し続ける。氷のブロックを押した場合その下が空白になるか、押された方向に空白がなくなるか、あるいは消滅するまでその方向に進み続ける。ただし、一段目にある氷のブロックに限っては、その下が空白である必要はない。またここでは連なっているブロックを押した場合、距離が遠いものもから順に「押された」と考えることにする。ここで距離はグリッド内でのマンハッタン距離を指す。
  • 引く
    プレイヤーは右か左にブロックがあり、かつその逆の方向が空白であればブロックを引くことが出来る。ただし、引こうとしているブロックが固定ブロックである場合は引くことが出来ない。ブロックを引いた場合、プレイヤーは引いた方向に1マス移動する。

プレイヤーの動作後に起きる自動動作:
次の順で自動動作が起きる。これはフィールドに変化があり続ける限り、繰り返し処理される。これが終わった後、プレイヤーは次の動作に入ることが出来る。

  • 脆いブロックのカウントダウン
    脆いブロックの上にいたプレイヤーがそのブロックの上からいなくなると、その脆いブロックのカウントは1減る。ただし自動処理によってプレイヤーがこのブロックの上からいなくなった場合はカウントに変化はない。
  • ブロックの消滅
    異次元ブロックの上にあるブロックは消滅する。
  • プレイヤーの落下
    プレイヤーの下にブロックが無い場合、下がブロックになるか、1段目にプレイヤーがくるまで落下し続ける。
  • ブロックの落下
    ブロックは、2段目以上にあり、かつ右下・下・左下すべてにブロックが無い場合、この条件を満たさなくなるまで落下し続ける。落下はタワーの下のブロックから順に発生し、同じ段のブロックでは左から順に発生する。

ゲームオーバーの条件:
プレイヤーの動作の直後、またはプレイヤーの動作の直前、以下の条件を満たした時点でゲームオーバーとなる。これらはこの順序で優先して判定される。ただし(E)はプレイヤーの動作の直後においては判定しない。

  • (A) プレイヤーがゴールブロックの上にいる
  • (B) プレイヤーが異次元ブロックの上にいる
  • (C) ブロックが落下してプレイヤーと重なっている
  • (D) ゴールブロックが初期位置とは別の位置にある
  • (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#
-
ブロックの落下.###.
#...#
#...#
#...#
.#.#
.#.#.
#...#
#...#
#.#.#
.#.#
-

Input

入力は複数のデータセットで与えられる。ひとつのデータセットは次の形式で与えられる。

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 で示す。

Constraints

3≤m≤50
3≤n≤50
タワー内に文字'S','G'は必ず一度だけ現れる。

Output

ひとつのデータセットにつき、次の形式で一行にゲームの結果を出力せよ。

Result

ただし Result はゲームオーバーをあらわす次のいずれかの引用符内の文字列である。

  • "Game Over : Cleared" (A)
  • "Game Over : Death by Hole" (B)
  • "Game Over : Death by Block" (C)
  • "Game Over : Death by Walking Goal" (D)
  • "Game Over : Gave Up" (E)

Sample Input

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

Sample Output

Game Over : Death by Hole
Game Over : Cleared
Game Over : Death by Walking Goal