세 갈래 이동

최대 30개 장애물이 있는 격자에서 왼쪽 위 칸에서 오른쪽 아래 칸까지 아래쪽 세 방향으로 내려가는 경로 수를 1000000009로 나눈 나머지로 구합니다.

보통7동적 계획법행렬아직 제출이 없습니다시간 제한7초메모리 제한64 MB

문제

가로 WW칸, 세로 HH칸인 격자가 있다. 가장 왼쪽 위 칸이 (1,1)(1, 1)이고, 오른쪽으로 갈수록 첫 번째 좌표가 커지고 아래로 갈수록 두 번째 좌표가 커진다. 지금 (1,1)(1, 1)에 서 있고 (W,H)(W, H)까지 가려고 한다.

(x,y)(x, y)에서는 바로 아래 왼쪽 칸 (x1,y+1)(x - 1, y + 1), 바로 아래 칸 (x,y+1)(x, y + 1), 바로 아래 오른쪽 칸 (x+1,y+1)(x + 1, y + 1) 중 한 칸으로만 이동할 수 있다.

몇몇 칸에는 장애물이 있다. 장애물이 있는 칸으로는 이동할 수 없고, 격자 밖으로 나갈 수도 없다. (W,H)(W, H)에 도달하는 경로의 수를 1,000,000,009로 나눈 나머지를 구하는 프로그램을 작성하라. (1,1)(1, 1)에는 장애물이 없다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다.

각 테스트 케이스의 첫 줄에 격자의 가로 길이 WW, 세로 길이 HH, 장애물의 개수 NN이 공백을 사이에 두고 주어진다. (1W751 \le W \le 75, 2H10182 \le H \le 10^{18}, 0N300 \le N \le 30)

이어지는 NN개의 줄에 장애물의 위치 xix_i, yiy_i가 주어진다. (1xiW1 \le x_i \le W, 1yiH1 \le y_i \le H)

마지막 테스트 케이스 다음 줄에는 00이 세 개 주어진다.

출력

각 테스트 케이스마다 케이스 번호와 (W,H)(W, H)에 도달하는 경로의 수를 1,000,000,009로 나눈 나머지를 한 줄에 출력한다. kk번째 테스트 케이스의 답이 aa이면 Case k: a 형식으로 출력한다.