atcoder#APC001I. Simple APSP Problem
Simple APSP Problem
配点 : 点
問題文
のマス目が与えられます。 左上隅のマス目を 、右下隅のマス目を と表すことにします。
マス目のうち、 個のマス目 は黒く塗られており、残りは白く塗られています。
白いマス目 の間の最短距離を、 から まで白いマス目のみを使用して移動するときの最短移動回数とします。 ただし、 回の移動では、上下左右の隣りあったマス目に移動できるものとします。
白いマス目は全部で 個あるため、白いマス目から つマス目を選ぶ方法は 通りあります。
この 通りそれぞれについて、選んだマスの間の最短距離を求め、 それを全て足して で割った余りを求めてください。
制約
- ならば、 または
- 白いマス目が つ以上存在する
- 全ての白いマス目 について、白いマス目のみを使用して から へ移動できる
入力
入力は以下の形式で標準入力から与えられる。
出力
最短距離の総和を で割った余りを出力してください。
2 3
1
1 1
20
マス目の色は以下のようになっています(.
: 白いマス目, #
: 黒いマス目)。
...
.#.
ここで,以下のように白いマス目にアルファベットを振ります。
ABC
D#E
すると,
- dist(A, B) =
- dist(A, C) =
- dist(A, D) =
- dist(A, E) =
- dist(B, C) =
- dist(B, D) =
- dist(B, E) =
- dist(C, D) =
- dist(C, E) =
- dist(D, E) =
であり,これらの総和は となります。
ただし,dist(A, B) はマス目A, Bの最短距離とします。
2 3
1
1 2
16
以下のように白いマス目にアルファベットを振ります。
ABC
DE#
すると,
- dist(A, B) =
- dist(A, C) =
- dist(A, D) =
- dist(A, E) =
- dist(B, C) =
- dist(B, D) =
- dist(B, E) =
- dist(C, D) =
- dist(C, E) =
- dist(D, E) =
であり,これらの総和は となります。
3 3
1
1 1
64
4 4
4
0 1
1 1
2 1
2 2
268
1000000 1000000
1
0 0
333211937