题目描述
译自 ROI Regional 2025 Day2 T4. Туристический маршрут
一群小学生来到一座新城市游览,决定参观这里的名胜古迹。我们可以将这座城市看作一个 n×m 的矩形网格,其中某些格子上有景点。
小伙伴们从格子 (1,1) 开始他们的旅程,想要到达格子 (n,m),然后再返回起点。此外,城市中有 k 个景点,位于格子 (x1,y1),…,(xk,yk),他们一定要全部参观到。

他们可以花费一分钟从格子 (a,b) 移动到与之相邻的格子 (c,d),如果它们在边上相邻,即满足 ∣a−c∣+∣b−d∣=1。显然,完成整个路线至少需要 2n+2m−4 分钟,我们只考虑这种时长的路线。
我们称一条路线为 有趣的路线,如果满足以下条件:
- 他们花费恰好 2n+2m−4 分钟完成这条路线;
- 路线中的每个格子最多经过一次;
- 路线必须经过所有包含景点的格子。
请帮助小学生们计算一共有多少条不同的有趣路线。由于结果可能非常大,请输出对 109+7 取模的结果。
输入格式
第一行输入三个整数 n、m 和 k (3≤n,m≤106,0≤k≤2000)。
接下来的 k 行中,每行包含两个整数 xi,yi (1≤xi≤n,1≤yi≤m),表示第 i 个景点的位置。保证所有的 (xi,yi) 都是不同的。也就是说,对于任意不同的索引 i 和 j (1≤i<j≤n),有 xi=xj 或 yi=yj。
输出格式
输出一个整数,表示有趣路线的数量对 109+7 取模的结果。
3 4 2
2 2
2 3
6
以下展示了第一个样例中所有的有趣路线,包含景点的格子用星号表示。:

3 4 3
3 1
2 3
1 4
0
数据范围与提示
详细子任务附加限制及分值如下表所示。
子任务 |
分值 |
附加限制 |
子任务依赖 |
1 |
5 |
n=3;m,k≤100 |
|
2 |
9 |
n,m,k≤5 |
3 |
6 |
n,m,k≤8 |
2 |
4 |
17 |
n,m,k≤30 |
2,3 |
5 |
16 |
n,m,k≤100 |
1∼4 |
6 |
8 |
k=0 |
|
7 |
11 |
k=1 |
8 |
12 |
k≤16 |
2,3,6,7 |
9 |
9 |
k≤100 |
1∼8 |
10 |
7 |
无附加限制 |
1∼9 |