#apc001i. [apc001_i]Simple APSP Problem

[apc001_i]Simple APSP Problem

問題文

HtimesWH \\times W のマス目が与えられます。 左上隅のマス目を (0,0)(0, 0)、右下隅のマス目を (H1,W1)(H-1, W-1) と表すことにします。

マス目のうち、NN 個のマス目 (x1,y1),(x2,y2),...,(xN,yN)(x_1, y_1), (x_2, y_2), ..., (x_N, y_N) は黒く塗られており、残りは白く塗られています。

白いマス目 A,BA, B の間の最短距離を、AA から BB まで白いマス目のみを使用して移動するときの最短移動回数とします。 ただし、11 回の移動では、上下左右の隣りあったマス目に移動できるものとします。

白いマス目は全部で H×WNH × W - N 個あるため、白いマス目から 22 つマス目を選ぶ方法は (H×WN)C2_{(H×W-N)}C_2 通りあります。

この (H×WN)C2_{(H×W-N)}C_2 通りそれぞれについて、選んだマスの間の最短距離を求め、 それを全て足して 1,000,000,007=109+71,000,000,007=10^9+7 で割った余りを求めてください。

制約

  • 1leqH,Wleq1061 \\leq H, W \\leq 10^6
  • 1leqNleq301 \\leq N \\leq 30
  • 0leqxileqH10 \\leq x_i \\leq H-1
  • 0leqyileqW10 \\leq y_i \\leq W-1
  • ineqji \\neq j ならば、xineqxjx_i \\neq x_j または yineqyjy_i \\neq y_j
  • 白いマス目が 11 つ以上存在する
  • 全ての白いマス目 A,BA, B について、白いマス目のみを使用して AA から BB へ移動できる

入力

入力は以下の形式で標準入力から与えられる。

HH WW NN x1x_1 y1y_1 x2x_2 y2y_2 :: xNx_N yNy_N

出力

最短距離の総和を 109+710^9+7 で割った余りを出力してください。


入力例 1

2 3
1
1 1

出力例 1

20

マス目の色は以下のようになっています(.: 白いマス目, #: 黒いマス目)。

...
.#.

ここで,以下のように白いマス目にアルファベットを振ります。

ABC
D#E

すると,

  • dist(A, B) = 11
  • dist(A, C) = 22
  • dist(A, D) = 11
  • dist(A, E) = 33
  • dist(B, C) = 11
  • dist(B, D) = 22
  • dist(B, E) = 22
  • dist(C, D) = 33
  • dist(C, E) = 11
  • dist(D, E) = 44

であり,これらの総和は 2020 となります。

ただし,dist(A, B) はマス目A, Bの最短距離とします。


入力例 2

2 3
1
1 2

出力例 2

16

以下のように白いマス目にアルファベットを振ります。

ABC
DE#

すると,

  • dist(A, B) = 11
  • dist(A, C) = 22
  • dist(A, D) = 11
  • dist(A, E) = 22
  • dist(B, C) = 11
  • dist(B, D) = 22
  • dist(B, E) = 11
  • dist(C, D) = 33
  • dist(C, E) = 22
  • dist(D, E) = 11

であり,これらの総和は 1616 となります。


入力例 3

3 3
1
1 1

出力例 3

64

入力例 4

4 4
4
0 1
1 1
2 1
2 2

出力例 4

268

入力例 5

1000000 1000000
1
0 0

出力例 5

333211937