AT_apc001_i Simple APSP Problem

Description

[problemUrl]: https://atcoder.jp/contests/apc001/tasks/apc001_i $ H\ \times\ W $ のマス目が与えられます。 左上隅のマス目を $ (0,\ 0) $、右下隅のマス目を $ (H-1,\ W-1) $ と表すことにします。 マス目のうち、$ N $ 個のマス目 $ (x_1,\ y_1),\ (x_2,\ y_2),\ ...,\ (x_N,\ y_N) $ は黒く塗られており、残りは白く塗られています。 白いマス目 $ A,\ B $ の間の最短距離を、$ A $ から $ B $ まで**白いマス目のみ**を使用して移動するときの最短移動回数とします。 ただし、$ 1 $ 回の移動では、上下左右の隣りあったマス目に移動できるものとします。 白いマス目は全部で $ H\ ×\ W\ -\ N $ 個あるため、白いマス目から $ 2 $ つマス目を選ぶ方法は $ _{(H×W-N)}C_2 $ 通りあります。 この $ _{(H×W-N)}C_2 $ 通りそれぞれについて、選んだマスの間の最短距離を求め、 それを全て足して $ 1,000,000,007=10^9+7 $ で割った余りを求めてください。

Input Format

入力は以下の形式で標準入力から与えられる。 > $ H $ $ W $ $ N $ $ x_1 $ $ y_1 $ $ x_2 $ $ y_2 $ $ : $ $ x_N $ $ y_N $

Output Format

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

Explanation/Hint

### 制約 - $ 1\ \leq\ H,\ W\ \leq\ 10^6 $ - $ 1\ \leq\ N\ \leq\ 30 $ - $ 0\ \leq\ x_i\ \leq\ H-1 $ - $ 0\ \leq\ y_i\ \leq\ W-1 $ - $ i\ \neq\ j $ ならば、$ x_i\ \neq\ x_j $ または $ y_i\ \neq\ y_j $ - 白いマス目が $ 1 $ つ以上存在する - 全ての白いマス目 $ A,\ B $ について、白いマス目のみを使用して $ A $ から $ B $ へ移動できる ### Sample Explanation 1 マス目の色は以下のようになっています(`.`: 白いマス目, `#`: 黒いマス目)。 ``` ... .#. ``` ここで,以下のように白いマス目にアルファベットを振ります。 ``` ABC D#E ``` すると, - dist(A, B) = $ 1 $ - dist(A, C) = $ 2 $ - dist(A, D) = $ 1 $ - dist(A, E) = $ 3 $ - dist(B, C) = $ 1 $ - dist(B, D) = $ 2 $ - dist(B, E) = $ 2 $ - dist(C, D) = $ 3 $ - dist(C, E) = $ 1 $ - dist(D, E) = $ 4 $ であり,これらの総和は $ 20 $ となります。 ただし,dist(A, B) はマス目A, Bの最短距離とします。 ### Sample Explanation 2 以下のように白いマス目にアルファベットを振ります。 ``` ABC DE# ``` すると, - dist(A, B) = $ 1 $ - dist(A, C) = $ 2 $ - dist(A, D) = $ 1 $ - dist(A, E) = $ 2 $ - dist(B, C) = $ 1 $ - dist(B, D) = $ 2 $ - dist(B, E) = $ 1 $ - dist(C, D) = $ 3 $ - dist(C, E) = $ 2 $ - dist(D, E) = $ 1 $ であり,これらの総和は $ 16 $ となります。