격자 이동하기

시간 제한1초메모리 제한1024 MB

요약
단위 직교 이동과 주어진 길이 sqrt(2)인 대각선 이동을 이용해 (0,0)에서 (a,b)까지 가는 최단 경로의 수를 구한다.
난이도

어려움10점 중 8점

유형
조합론, 동적 계획법, 수학, 정렬
정답자
아직 제출이 없습니다

문제

동우는 (a,b)\left(a,b\right)크기의 특수한 22차원 격자 위에서 살고 있다. 이 격자에서 모든 정수 좌표 (x,y)\left( x,y \right)는 상하좌우로 인접한 좌표와 길이 11인 길로 연결되어 있다. 또한, 특정 좌표들에서는 대각선으로도 이동할 수 있는 길이 있는데, 이 경우 (x,y)\left( x,y \right)과 (x+1,y+1)\left( x+1,y+1 \right) 사이에 길이 2\sqrt{2}인 길로 연결되어 있다.

동우는 원점 (0,0)\left( 0,0 \right)에서 출발하여 길을 따라 목표 지점 (a,b)\left( a,b \right)로 이동하려고 한다. 이때, 동우가 이동할 수 있는 최단 경로의 경우의 수를 구해보자.

입력

첫 번째 줄에 목표 지점의 좌표 (a,b)(a,b)를 나타내는 두 정수 a,b(0≤a,b≤106;a,b(0\leq a,b\leq 10^6; 1≤a+b)1\leq a+b)가 공백으로 구분되어 주어진다.

두 번째 줄에 대각선 경로의 개수 N(0≤N≤min⁡(5,000,a⋅b))N(0\leq N\leq\min(5\\, 000,a\cdot b))이 주어진다.

세 번째 줄부터 NN줄에 걸쳐 대각선 길이 존재하는 정수 좌표 (x_i,y_i)(x\_i,y\_i)가 공백으로 구분되어 주어진다. 이는 (x_i,y_i)(x\_i,y\_i)와 (x_i+1,y_i+1)(x\_i+1,y\_i+1) 사이에 길이 있음을 의미한다. 같은 좌표가 여러 번 주어지지 않는다.

출력

동우가 이동할 수 있는 최단 경로의 경우의 수를 109+710^9+7로 나눈 나머지를 출력하라.

단, 109+710^9+7은 소수이다.

예제3

  1. 예제 1

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

    입력
    3 3
    9
    0 0
    0 1
    0 2
    1 0
    1 1
    1 2
    2 0
    2 1
    2 2
    
    예상 출력
    1
    
  3. 예제 3

    입력
    3 3
    8
    0 0
    0 1
    0 2
    1 0
    1 2
    2 0
    2 1
    2 2
    
    예상 출력
    8