#P12769. 决斗

决斗

决斗

Problem Description

Seto Kaiba正在研究决斗。 众所周知,游戏王中有一张名叫被封印的艾克佐迪亚的卡片,抽到它的五个部位就可以直接赢得决斗胜利。 类似的,我们给出一个新的决斗规则。对于每轮决斗,会给定一个卡池,里面共有 nn 张卡片,第 ii 张卡片的类型是 aia_i ,同时给出一个常数 kk ,表示一次使用 kk 张相同类型的卡片即可获得胜利。每轮决斗会分为若干次决斗,每次决斗双方会抽取卡池中的一个区间作为自己的手卡。为了增加决斗的多样性,还会对卡池进行一些修改操作,这些修改是永久性的。 现在,Seto Kaiba想要知道对于当前卡池,如果你以先手身份抽到了区间 [l,r][l,r] ,你有多少种使用卡片的方式直接获得胜利。假设两种直接获得胜利的选择方式分别为 ac1,ac2,...,acka_{c_1},a_{c_2},...,a_{c_k}ad1,ad2,...,adka_{d_1},a_{d_2},...,a_{d_k}c,dc,d 是满足单调递增的有序数列。我们认为两种方式不同当且仅当至少存在一个 ii 满足 1ik1 \leq i \leq kcidic_i \neq d_i 。 由于答案很大,所以每轮决斗还会给定一个常数 modmod , 你只需要回答答案对 modmod 取模后的结果即可。

Input

第一行输入一个整数 TT1T1051 \leq T \leq 10^5),表示决斗轮数。 对于每轮决斗,第一行输入四个整数 n,q,k,modn,q,k,mod1n,q1051 \leq n,q \leq 10^5 , 1k501 \leq k \leq 50 , 1mod9982443531 \leq mod \leq 998244353),n,k,modn,k,mod 含义同题意描述, qq 表示修改与询问的总数。 下面 11 行,输入 nn 个整数 aia_i ,表示每张卡片的类型 (1ain1 \leq a_i \leq n)。 接下来 qq 行,会先输入一个整数 opop ,表示这次操作的类型。 若 op=1op = 1 ,会继续输入三个整数 l,r,cl,r,c ,表示从第 ll 张到第 rr 张卡片的类型全部修改为 cc 。 若 op=2op = 2 ,会继续输入两个整数 c1,c2c_1,c_2 ,表示所有类型为 c1c_1 的卡片类型都修改为 c2c_2 。 若 op=3op = 3 ,会继续输入两个整数 l,rl,r ,表示询问抽到区间 [l,r][l,r] 的获胜方案数。 对于所有数据,满足 lrl \leq rnn 的和与 qq 的和均不超过 4×1054 \times 10^5 ,且 n>1000n > 1000 的数据不超过3组。

Output

对于每次询问,输出一行一个数,表示获胜方案数对 modmod 取模后的结果。

Sample Input

2
8 10 2 114514
6 6 8 5 5 1 8 4
3 3 5
3 6 6
2 3 4
2 3 2
3 1 5
2 7 6
1 3 4 7
1 5 8 4
2 5 2
3 1 7
8 9 2 1919810
2 4 8 2 6 3 3 8
3 3 8
3 4 7
2 2 7
1 1 1 5
2 7 3
3 2 5
2 3 8
1 4 8 6
3 4 6

Sample Output

1
0
2
5
2
1
0
3

Source

2025“钉耙编程”中国大学生算法设计暑期联赛(1)