题目描述
有一个整数 A=a1a2⋯an。
称 x=x1x2⋯xk 是关于序列 p={p1,p2,⋯,pk} 的生成数字,当且仅当 ∀1≤i≤k,xi=api,可以证明 x 唯一。这个数记为 Z(p)。这里 x 可以有前导 0。
有 q 次操作,每次操作为下面两项之一:
- M x y k:∀x≤i≤y,修改 ai 为 k。保证 1≤x≤y≤n,0≤k≤9。
- Q x y k:询问有多少 L={x,x+1,⋯,y}k 的非空子序列 p 使得 3∣Z(p)?注意:即使两个子序列本质相同,但取出的位置不同,仍被记为不同的子序列。答案对 109+7 取模,保证 1≤x≤y≤n,1≤k≤109。
对于序列 L,Lk 被定义为 L 重复 k 次得到的序列。如 {1,3}3={1,3,1,3,1,3}。
输入格式
第 1 行,2 个整数 n,q。
第 2 行,一个 n 位整数 A。可以有前导 0。
接下来 q 行,每行一个操作。
输出格式
对于每个形如 Q x y k 的操作,输出一行一个整数,表示答案。答案对 109+7 取模。
样例
3 3
234
Q 1 3 1
M 2 2 8
Q 2 3 2
3
5
数据范围
对于 100% 的数据,1≤n,q≤2×105。
记所有形如 Q x y k 操作中,k 的最大值为 kmax。
| Subtask |
分值 |
n≤ |
q≤ |
kmax≤ |
依赖子任务 |
| 1 |
10 |
10 |
3 |
2 |
- |
| 2 |
2000 |
1 |
| 3 |
2000 |
1 - 2 |
| 4 |
109 |
1 - 3 |
| 5 |
15 |
2×105 |
1 |
- |
| 6 |
20 |
1, 2, 5 |
| 7 |
30 |
109 |
1 - 6 |