UOJ Logo

NOI.AC

2S 666MB
统计

Lyra 最近迷上了刺绣,由于对字母的执念,她只喜欢在布条上绣字符串,Lyra 认为字母的大小写是不一样的,所以每个位置她一共有 $52$ 种图案的选择。

现在 Lyra 完成了一个长度为 $n$ 的字符串并把它送给了 Evan,可是作为 OIer,Evan 只对 \sout{肥宅快乐串} 本质不同的子序列感兴趣。

于是 Evan 给了你 $m$ 个询问,每次询问一个区间,你需要告诉 Evan 这个区间里有多少个本质不同的子序列,当然这个子序列得非空。

字符串 $S_{[1,|S|]}$ 的一个子序列定义为一个序列 $S_{i_1}S_{i_2} \cdots S_{i_m}$ 其中 $1 \leq i_1 \leq i_2 \leq \cdots \leq i_m$,$m$ 为子序列的长度。

本质不同的子序列表示把子序列看成字符串并去重的结果,例如 $\texttt{lzz}$ 的本质不同的子序列有 $\texttt{l,z,lz,zz,lzz}$。

当然本质不同的子序列数目可能很多,你只需要对质数 $P$ 取模即可。

输入格式

第一行四个整数 $n, m, P, tp$,$n, m, P$ 意义如题所述,$tp = 0$ 表示询问从输入读入,而 $tp = 1$ 表示询问由伪随机生成。

第二行一个长度为 $n$ 的由大小写字母组成的字符串。

若 $tp = 0$,接下来 $m$ 行,每行两个整数 $l_i, r_i$ 表示每个询问的询问区间。

若 $tp = 1$,接下来一行五个整数 $x, y, a, b, c$,询问生成方式如下:

令 $D = 10^9 + 7, u_0 = x, v_0 = y$,

$u_i = ((a \cdot u_{i - 1} + b \cdot v_{i - 1} + c \cdot i)~XOR~ans_{i-1}) \mod D$

$v_i = ((b \cdot u_{i - 1} + c \cdot v_{i - 1} + a \cdot i)~XOR~ans_{i-1}) \mod D$

$l_i = \min((u_i \mod n) + 1, (v_i \mod n) + 1)$

$r_i = \max((u_i \mod n) + 1, (v_i \mod n) + 1)$

则 $[l_i, r_i]$ 即为第 $i$ 个询问的区间。

其中 $XOR$ 表示按位异或运算,$ans_j$ 表示第 $j$ 个询问的答案,规定 $ans_0 = 0$,注意这里的 $ans_j$ 是已经对 $P$ 取过模的结果。

输出格式

为简化输出,对 $tp = 0$ 你需要输出所有询问答案的异或和,而对于 $tp = 1$,你只需要输出 $ans_m$ 即可。

样例输入输出

样例输入1

3 3 1009 0
Lzz
1 2
2 3
1 3

样例输出1

4

样例解释1

三个询问的答案分别是 $3, 2, 5$,异或和是 $4$。

样例输入2

见 $\texttt{/embroidery/ex_embroidery2.in}$

样例输出2

见 $\texttt{/embroidery/ex_embroidery2.ans}$

数据范围及约定

对于全部数据 $1 \leq n, m \leq 10^6; 10^8 \leq P \leq 10^9+7$ 是质数$; 0 < x, y, a, b, c < 10^9+7; 1 \leq l_i \leq r_i \leq n.$

令 $S$ 为字符串中出现的不同的字符数目,各个测试点限制如下表所述:

测试点编号 $n$ $m$ $S$ $tp$ 测试点编号 $n$ $m$ $S$ $tp$
1 $15$ $100$ $26$ $0$ 11 $100000$ $1$ $10$ $0$
2 $20$ $1$ 12 $52$
3 $1000$ $1000$ $2$ 13 $1000000$ $1000000$ $20$ $1$
4 $10$ $0$ 14 $20$
5 $30$ $1$ 15 $40$
6 $52$ 16 $40$
7 $50000$ $50000$ $3$ 17 $52$
8 $10$ $0$ 18
9 $100000$ $100000$ $3$ 19
10 $10$ $1$ 20

时间限制:$2\texttt{s}$

空间限制:$666\texttt{MB}$

下载

样例数据下载