#P11497. [2023省队模拟]无损加密

[2023省队模拟]无损加密

题目描述

Sunny bunnySunny\ bunny 决定手动对图片加密。

他手头上有一张长 nn 个像素点,宽 mm 个像素点的图片,并且。图片的行按照 1,2,3,,n1,2,3,\dots,n 编号,列按照 1,2,3,,m1,2,3,\dots,m 编号。我们将初始的图片编号为第 00 张图片,并用矩阵 (A0)n×m(A_0)_{n\times m} 来表示这张图片, (A0)ij(A_0)_{ij} 表示原图第 ii 行、第 jj 列交叉处的像素的颜色。对于之后会遇到的更多图片,我们也以这种矩阵的方式来表示。

然而,由于 Sunny bunnySunny\ bunny 在现实中并没能和伙伴们玩耍,因此最开始的图片是几乎空白的:

$$(A_0)_{ij}= \begin{cases} 1&i=j\newline 0&i\neq j \end{cases}$$

接下来, Sunny bunnySunny\ bunny 将要进行 qq 次加密操作。第 kk 次操作会在第 k1k-1 张图片的基础上进行,产生的新的图片被编号为第 kk 张。相应地,我们也可以通过第 k1k-1 张图片的矩阵 (Ak1)n×m(A_{k-1})_{n\times m} ,生成第 kk 张图片的矩阵 (Ak)n×m(A_k)_{n\times m}

具体地,进行第 kk 次操作时, Sunny bunnySunny\ bunny 会给出 lk,rk,ck,dkl_k,r_k,c_k,d_k ,并在矩阵 (Ak1)n×m(A_{k-1})_{n\times m} 的基础上生成一个新的矩阵 (Ak)n×m(A_k)_{n\times m}

j∉[lk,rk]j\not\in [l_k,r_k] ,则 (Ak)ij=dk(Ak1)ij(A_k)_{ij}=d_k (A_{k-1})_{ij}j[lk,rk]j\in [l_k,r_k] ,则 $(A_k)_{ij}=d_k \sum_{t=l_k}^j(c_k)^{j-t}(A_{k-1})_{it}$ 。

但是,为了避免加密过后整张图片变得过于难以分辨, Sunny bunnySunny\ bunny 需要对加密操作进行限制:每个格子被修改的次数不会太多。

形式化地,他保证,对于所有 1im1\le i\le m ,都有:$$\sum_{k=1}^q[i\in [l_k,r_k]]\le s$$

其中 ss 是一个较小的常数。此处,我们用 [P][P] 量化命题 PP 的真假:$$[P]=\begin{cases} 1&P\newline 0&\neg P \end{cases}$$

容易发现,只要知道了 Sunny bunnySunny\ bunnyqq 次操作的所有参数, I.W. bunnyI.W.\ bunny 就可以反过来从加密后的图片解密得到最初的图片。因此,这种加密方式可以说是"无损"的。

然而,由于图片实在是太大了,文件传输速度限制了 I.W.bunnyI.W. bunny 一时半会儿还收不到这张图片。为了保证最终 I.W.bunnyI.W. bunny 收到的图片不被篡改, Sunny bunnySunny\ bunny 决定先给她发一段校验码。

对于一张 n×mn\times m 的,且满足 nmn\le m 的图片,假如我们用矩阵 Bn×mB_{n\times m} 来表示它, BijB_{ij} 表示第 ii 行与第 jj 列交叉处的像素的颜色,我们可以定义它的校验码 f(B)f(B) 为:$$f(B)=\left(\sum_{S\subseteq{1,2,3,\dots,m},|S|=n}\det B_S\right)\bmod (10^9+7)$$

此处,我们定义 BSB_SBB 的所有行与 SS 中元素作为标号对应的列的交叉处生成的一个 n×Sn\times |S | 的矩阵。形式化地,我们令 的矩阵。形式化地,我们令 | S=kS|=k ,而令 SS 中元素从小到大为 s1,s2,,sks_1,s_2,\dots,s_k ,则有:$$(B_S){ij}=B{i,s_j}$$

不过, Sunny bunnySunny\ bunny 这才意识到,他做的加密操作次数实在是太多了!现在,他只好向你求助:你能够帮他算出校验码 f(Ak)f(A_k) 吗?之后对于图片的加密操作,他会一个人承担的。

【提示】

BinetCauchyBinet-Cauchy 定理:对于一个 n×mn\times m 且 的矩阵 AAm×nm\times n 的矩阵 BB ,该定理指出:$$\det AB=\sum_{S\subseteq {1,2,3,\dots,m},|S|=n} \det A_S\det B^S$$

此处,我们定义 ASA_SAA 的所有行与 SS 中元素作为标号对应的所有列的交叉处生成的 n×Sn\times |S| 的矩阵, BSB^SBB 中所有列与 SS 中元素作为标号对应的所有行的交叉处生成的 S×n|S|\times n 的矩阵。

形式化地,令 S=k|S|=k ,令 SS 中元素从小到大为 s1,s2,s3,,sks_1,s_2,s_3,\dots,s_k ,则:$$(A_S){ij}=A{i,s_j},(B^S){ij}=B{s_i,j}$$

输入格式

第一行三个正整数 n,m,qn,m,q ,分别表示图片的长度、宽度和 Sunny bunnySunny\ bunny 将要进行的加密操作次数。

接下来 qq 行,每行四个正整数 lk,rk,ck,dkl_k,r_k,c_k,d_k ,表示 Sunny bunnySunny\ bunnykk 次加密操作时使用的参数。

输出格式

输出仅一行一个非负整数,表示最终图片的校验码 f(Ak)f(A_k) 的值。

数据范围

对于所有测试点: $2\le n\le m\le 2\times 10^5,1\le s\le 8,1\le q\le sm$ ,且对于所有的 $1\le k\le q,1\le l_k < r_k\le m,1\le c_k,d_k < 10^9+7$ 。

每个测试点的具体限制见下表:

测试点编号 mm \le ss \le ck,dkc_k,d_k 特殊限制
121\sim 2 1010 88 <109+7 < 10^9+7 mn1m-n\le 1
33 100100 =1=1
44 <109+7 < 10^9+7
575\sim 7 2×1052\times 10^5 11 =1=1
8108\sim 10 33
111311\sim 13 55
141514\sim 15 <109+7 < 10^9+7
162016\sim 20 88 =1=1
212521\sim 25 <109+7 < 10^9+7

输入样例 1

2 3 3
1 3 1 1
2 3 1 1
1 2 1 1

输出样例 1

5

输入样例 2

3 5 3
1 4 2 1
3 5 3 1
1 4 1 1

输出样例 2

57

样例解释

对于样例 11

初始时,矩阵 A0A_0 为:

$$\begin{bmatrix} 1&0&0\newline 0&1&0 \end{bmatrix}$$

进行加密操作 11 之后,矩阵 A1A_1 为:$$\begin{bmatrix} 1&1&1\newline 0&1&1 \end{bmatrix}$$

进行加密操作 22 之后,矩阵 A2A_2 为:$$\begin{bmatrix} 1&1&2\newline 0&1&2 \end{bmatrix}$$

进行加密操作 33 之后,矩阵 A3A_3 为:$$\begin{bmatrix} 1&2&2\newline 0&1&2 \end{bmatrix}$$

最终,我们要求 $f(A_3)=\det A_3(\\{1,2\\})+\det A_3(\\{1,3\\})+\det A_3(\\{2,3\\})$ 。举一个例子:$$A_3({2,3})=\begin{bmatrix} 2&2\newline 1&2 \end{bmatrix}$$

它的行列式为 22

A3(1,2)A_3(\\{1,2\\})A3(1,3)A_3(\\{1,3\\}) 类似。最终我们得到 f(A3)=1+2+2=5f(A_3)=1+2+2=5