『MdOI R3』Pekka Bridge Spam

题目背景

JohnVictor 比较喜欢玩 Clash Royale。 他喜欢玩一套叫做 Pekka Bridge Spam 的卡组,然而这卡组被削弱了。现在他天梯已经掉了很多分了,不会玩了,只能在竞技场上给他的攻城锤安排地方了。 于是就有了这道题。

题目描述

JohnVictor 的皇室竞技场是一个 $2n \times 2m$($2n$ 行,$2m$ 列)的方格表,他要在上面放 $n\times m$ 个 $1 \times 2$ 的攻城锤,使得任意两个攻城锤不相交。 然而攻城锤里面的野蛮人靠太近会打架,所以他要求任意一个 $2 \times 2$ 的正方形中有两个相邻的格子没有被任何攻城锤占有。 现在已经摆好了 $k$ 个攻城锤了,JohnVictor 想要知道有多少种方法能摆放这些攻城锤,注意,攻城锤两两之间没有区别。 由于这个答案实在是太大了,JohnVictor 只想知道这个答案对素数 $p$ 取模后的余数。**保证取模前的真实答案大于 $0$**。 为了避免玩过皇室的参赛者对题目理解产生问题,这里的攻城锤看做一个 $1 \times 2$ 的多米诺,翻转后也与自身一样。如果还是不理解可以参考样例。 **由于本题数据范围较大,使用 C++ 的选手可以使用以下代码来加快取模速度。** 代码出自 [KATCL](https://github.com/kth-competitive-programming/kactl/blob/master/content/various/FastMod.h) 。 ```cpp #include <bits/stdc++.h> using namespace std; typedef unsigned long long ull; typedef __uint128_t L; struct FastMod { ull b, m; FastMod(ull b) : b(b), m(ull((L(1) << 64) / b)) {} ull reduce(ull a) { ull q = (ull)((L(m) * a) >> 64); ull r = a - q * b; // can be proven that 0 <= r < 2*b return r >= b ? r - b : r; } }; FastMod F(2); int main() { int M = 1000000007; F = FastMod(M); ull x = 10ULL*M+3; cout << x << " " << F.reduce(x) << "\n"; // 10000000073 3 } ``` 使用方法: 假设当前程序中需要取模的数为 $p$,那么就在 `main` 函数开头处调用 `F = FastMod(p);`。 计算 $a\bmod p$ 的时候调用 ` F.reduce(a); `, 返回值就是 $a\bmod p$ 的值。

输入输出格式

输入格式


第一行为四个整数 $n,m,k,p$。 接下来 $k$ 行,每行四个整数 $x_{1i},y_{1i},x_{2i},y_{2i}(1 \le i \le k)$,代表一块攻城锤的位置。 注意这里 $x,y$ 坐标表示的是在第 $x$ 行第 $y$ 列,并不是横纵坐标。

输出格式


一行一个整数,输出答案对 $p$ 取模后的值。

输入输出样例

输入样例 #1

1 2 0 19260817

输出样例 #1

9

输入样例 #2

2 2 0 19260817

输出样例 #2

36

输入样例 #3

1 2 1 19260817
1 1 2 1

输出样例 #3

4

输入样例 #4

3 3 1 19260817
1 2 1 1

输出样例 #4

190

说明

【样例 1 解释】 $9$ 种情况如下图所示。 ![](https://cdn.luogu.com.cn/upload/image_hosting/0s4px806.png) 【样例 2 解释】 我有一种绝妙的解释方法,可惜这里位置太小,我写不下。 【样例 3 解释】 上图中第一行的第 $1,2$ 幅和第二行的第 $1,2$ 幅图就是要求的 $4$ 种情况。 更多样例请[到这里](https://www.luogu.com.cn/paste/b2ad2hoy)领取。 【数据范围】 本题采用捆绑测试,共有 $7$ 个子任务。 对于 $100\%$ 的数据,$1 \le n \le 9 \times 10^3$,$1 \le m \le 10^{18}$,$0 \le k \le 10^5$,$|x_{1i}-x_{2i}|+|y_{1i}-y_{2i}|=1$,$1 \le x_{1i},x_{2i} \le 2n$,$1 \le y_{1i},y_{2i} \le 2m$,$10^7\le p \le 10^9 + 9 $,**输入数据保证有解且 $p$ 为素数**。 |子任务编号|$n\leq$|$m\leq$|其他性质|分值|时间限制| |:-:|:-:|:-:|:-:|:-:|:-:| |1|$3$|$3$||$5$|$1.0s$| |2|$10$|$10$|$k=0$|$10$|$1.0s$| |3|$5 \times 10^3$|$5 \times 10^3$||$13$|$2.0s$| |4|$80$|||$17$|$1.0s$| |5|$2\times 10^3$||$p=998244353$|$20$|$3.0s$| |6||||$35$|$3.0s$| 【温馨提示】 为了确保卡掉小常数的错解本题开大了数据范围,请注意常数因子对程序运行效率的影响。