만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

간단한 APSP 문제

시간 제한3초메모리 제한256 MB

요약
최대 30개의 검은 칸이 있는 매우 큰 H×W 격자에서 모든 흰 칸 쌍의 최단 거리 합을 10^9+7로 나눈 나머지로 구합니다.
난이도

어려움10점 중 8점

유형
조합론, 수학, 그래프, 최단 경로
정답자
아직 제출이 없습니다

문제

H×WH \times W 크기의 격자가 있다. 왼쪽 위 칸의 인덱스는 (0,0)(0, 0)이고, 오른쪽 아래 칸의 인덱스는 (H−1,W−1)(H-1, W-1)이다.

NN개의 칸 (x1,y1),(x2,y2),…,(xN,yN)(x_1, y_1), (x_2, y_2), \ldots, (x_N, y_N)은 검은색으로 칠해져 있고, 나머지 칸은 모두 흰색이다.

흰색 칸 AA와 BB의 최단 거리는 흰색 칸만 거쳐서 AA에서 BB까지 갈 때 필요한 최소 이동 횟수이다. 한 번의 이동으로 상하좌우에 인접한 칸으로 갈 수 있다.

흰색 칸은 HW−NHW - N개이므로, 그중 두 칸을 고르는 방법은 CHW−N2C_{HW-N}^2가지이다. 각 경우마다 두 칸의 최단 거리를 구한 뒤, 그 합을 1 000 000 007=109+71\,000\,000\,007 = 10^9+7로 나눈 나머지를 구하라.

입력

입력은 다음 형식으로 주어진다.

H W
N
x_1 y_1
x_2 y_2
...
x_N y_N

출력

최단 거리의 총합을 109+710^9+7로 나눈 나머지를 출력하라.

제한

  • 1≤H,W≤1061 \leq H, W \leq 10^6
  • 1≤N≤301 \leq N \leq 30
  • 0≤xi≤H−10 \leq x_i \leq H-1, 0≤yi≤W−10 \leq y_i \leq W-1
  • i≠ji \neq j이면 xi≠xjx_i \neq x_j 또는 yi≠yjy_i \neq y_j이다.
  • 흰색 칸은 적어도 한 개 있다.
  • 임의의 흰색 칸 AA, BB에 대해, 흰색 칸만 거쳐서 AA에서 BB로 갈 수 있다.

힌트

첫 번째 예시의 격자는 다음과 같다. '.'은 흰색 칸, '!'은 검은색 칸이다.

...
.!.

흰색 칸에 다음과 같이 알파벳을 붙인다.

ABC
D!E

그러면 dist(A,B)=1dist(A, B) = 1, dist(A,C)=2dist(A, C) = 2, dist(A,D)=1dist(A, D) = 1, dist(A,E)=3dist(A, E) = 3, dist(B,C)=1dist(B, C) = 1, dist(B,D)=2dist(B, D) = 2, dist(B,E)=2dist(B, E) = 2, dist(C,D)=3dist(C, D) = 3, dist(C,E)=1dist(C, E) = 1, dist(D,E)=4dist(D, E) = 4이고, 이들의 합은 2020이다.

두 번째 예시에서는 다음과 같이 알파벳을 붙인다.

ABC
DE!

이때 거리의 합은 1616이다.

예제5

  1. 예제 1

    입력
    2 3
    1
    1 1
    
    예상 출력
    20
    
  2. 예제 2

    입력
    2 3
    1
    1 2
    
    예상 출력
    16
    
  3. 예제 3

    입력
    3 3
    1
    1 1
    
    예상 출력
    64
    
  4. 예제 4

    입력
    4 4
    4
    0 1
    1 1
    2 1
    2 2
    
    예상 출력
    268
    
  5. 예제 5

    입력
    1000000 1000000
    1
    0 0
    
    예상 출력
    333211937