高杉やよいは,超売れっ子アイドルである. そんな彼女には,1つ苦手なものがある. 高いところだ・・・.彼女は,極度の高所恐怖症なのである. 彼女は今回,プロデューサーの不手際により,バラエティ番組で次のようなチャレンジに挑戦することになってしまった.
今回のロケは,とある忍者屋敷のとある一室で行われる. この部屋の床には,正方形のタイルが敷き詰められており,いくつかのタイルが抜け落ちて穴になっている. この穴から落ちると数メートル下の池にまっさかさまである. やよいのチャレンジ内容は,この部屋の指定された場所からスタートし,部屋の中に置かれた全ての巻物を回収し,ゴール地点まで持っていくことである.
やよいは,部屋の中を以下のルールに従って移動できる.
|
やよいは,なるべく早くこのチャレンジを終わらせたいと考えている. あなたの仕事は,このチャレンジを終了するための最短時間を求めるプログラムを書き,やよいを助けてあげることである.
忍者屋敷の床情報が与えられる.
まず,1行目に部屋の大きさを表す,WとHがスペース区切りで入力される(2 <= W, H <= 100). 続くH行の各行には,W文字の文字列が入力される. 床情報を表す文字には,以下の種類がある.
'S'と'G'と'M'は,歩ける床である. 'S'と'G'はそれぞれ,部屋の中にちょうど1個存在する.全ての巻物が揃っていない状態でゴールを通過しても構わない. 'M'は,部屋の中に最小で1個,最大で5個存在する.
全ての巻物を集めて,スタートからゴールへたどり着くための最短タイムを1行に出力せよ.入力データには,必ずそのようなルートがあると仮定してよい.
行の最後には,改行を出力すること.
3 4 S.M ... ... M.G
9
4 4 S..M .... ...# #..G
18
11 7 M.........M ........... ...#.S.#... ........... ...#.G.#... ........... M.........M
62