P13473 [GCJ 2008 #3] Endless Knight
Description
In the game of chess, there is a piece called the knight. A knight is special -- instead of moving in a straight line like other pieces, it jumps in an "L" shape. Specifically, a knight can jump from square $(r_1, c_1)$ to $(r_2, c_2)$ if and only if $(r_1 - r_2)^2 + (c_1 - c_2)^2 = 5$.
In this problem, one of our knights is going to undertake a chivalrous quest of moving from the top-left corner (the $(1, 1)$ square) to the bottom-right corner (the $(H, W)$ square) on a gigantic board. The chessboard is of height $H$ and width $W$.
Here are some restrictions you need to know.
* The knight is so straightforward and ardent that he is only willing to move towards the right and the bottom. In other words, in each step he only moves to a square with a bigger row number and a bigger column number. Note that, this might mean that there is no way to achieve his goal, for example, on a 3 by 10 board.
* There are $R$ squares on the chessboard that contain rocks with evil power. Your knight may not land on any of such squares, although flying over them during a jump is allowed.
Your task is to find the number of unique ways for the knight to move from the top-left corner to the bottom-right corner, under the above restrictions. It should be clear that sometimes the answer is huge. You are asked to output the remainder of the answer when divided by $10007$, a prime number.
Input Format
Input begins with a line containing a single integer, $N$. $N$ test cases follow.
The first line of each test case contains 3 integers, $H$, $W$, and $R$. The next $R$ lines each contain 2 integers each, $r$ and $c$, the row and column numbers of one rock. You may assume that $(1, 1)$ and $(H, W)$ never contain rocks and that no two rocks are at the same position.
Output Format
For each test case, output a single line of output, prefixed by "Case #$X$: ", where $X$ is the 1-based case number, followed by a single integer indicating the number of ways of reaching the goal, modulo $10007$.
Explanation/Hint
**Limits**
- $1 \leq N \leq 100$
- $0 \leq R \leq 10$
**Small dataset (5 Pts, Test set 1 - Visible)**
- $1 \leq W \leq 100$
- $1 \leq H \leq 100$
- $1 \leq r \leq H$
- $1 \leq c \leq W$
**Large dataset (20 Pts, Test set 2 - Hidden)**
- $1 \leq W \leq 10^{8}$
- $1 \leq H \leq 10^{8}$
- $1 \leq r \leq H$
- $1 \leq c \leq W$