#312. [CFCOI Collection 5] 三倍经验

[CFCOI Collection 5] 三倍经验

题目描述

有一个整数 A=a1a2⋯an‾A=\overline{a_1a_2\cdots a_n}。

称 x=x1x2⋯xk‾x=\overline{x_1x_2\cdots x_k} 是关于序列 p={p1,p2,⋯ ,pk}p=\{p_1,p_2,\cdots,p_k\} 的生成数字,当且仅当 ∀1≤i≤k,xi=api\forall 1 \le i \le k,x_i=a_{p_i},可以证明 xx 唯一。这个数记为 Z⁡(p)\operatorname{Z}(p)。这里 xx 可以有前导 00。

有 qq 次操作,每次操作为下面两项之一:

  1. M x y k\texttt{M} \ x \ y \ k:∀x≤i≤y\forall x \le i \le y,修改 aia_i 为 kk。保证 1≤x≤y≤n,0≤k≤91 \le x \le y \le n,0 \le k \le 9。
  2. Q x y k\texttt{Q} \ x \ y \ k:询问有多少 L={x,x+1,⋯ ,y}kL=\{x,x+1,\cdots,y\}^k 的非空子序列 pp 使得 3∣Z⁡(p)3 \mid \operatorname{Z}(p)?注意:即使两个子序列本质相同,但取出的位置不同,仍被记为不同的子序列。答案对 109+710^9+7 取模,保证 1≤x≤y≤n,1≤k≤1091 \le x \le y \le n,1 \le k \le 10^9。

对于序列 LL,LkL^k 被定义为 LL 重复 kk 次得到的序列。如 {1,3}3={1,3,1,3,1,3}\{1,3\}^3=\{1,3,1,3,1,3\}。

输入格式

第 11 行,22 个整数 n,qn,q。
第 22 行,一个 nn 位整数 AA。可以有前导 00。
接下来 qq 行,每行一个操作。

输出格式

对于每个形如 Q x y k\texttt{Q} \ x \ y \ k 的操作,输出一行一个整数,表示答案。答案对 109+710^9+7 取模。

样例

3 3
234
Q 1 3 1
M 2 2 8
Q 2 3 2
3
5

数据范围

对于 100%100\% 的数据,1≤n,q≤2×1051 \le n,q \le 2\times10^5。

记所有形如 Q x y k\texttt{Q} \ x \ y \ k 操作中,kk 的最大值为 kmax⁡k_{\max}。

Subtask 分值 n≤n\le q≤q\le kmax⁡≤k_{\max} \le 依赖子任务
1 10 1010 33 22 -
2 20002000 1
3 20002000 1 - 2
4 10910^9 1 - 3
5 15 2×1052 \times 10^5 11 -
6 2020 1, 2, 5
7 30 10910^9 1 - 6