#L3110. 「SDOI2019」快速查询

「SDOI2019」快速查询

题目描述

给定一个长度为 nn 的整数数列,里面的元素依次编号为 a1,a2,a3,,ana_1, a_2, a_3, \cdots, a_n。初始的时候,所有元素都为零。现在按照时间顺序提供了若干次关于这个数列的修改或询问,每一次修改或询问一定为以下六种情况之一:

  • 1 i val1\ i\ \text{val}:将 aia_i 赋值为给定整数 val\text{val}
  • 2 val2\ \text{val}:将所有元素同时加上 val\text{val}
  • 3 val3\ \text{val}:将所有元素同时乘上 val\text{val}
  • 4 val4\ \text{val}:将所有元素同时赋值为 val\text{val}
  • 5 i5\ i:询问第 ii 个元素 aia_i 现在的值是多少;
  • 66:询问现在所有元素的和。

输入格式

为了避免读入太大,输入文件采取如下的形式。

  • 第一行给定整数 nn,表示给定数列长度为 nn
  • 第二行给定整数 qq,并且之后的 qq 行,每一行提供一个修改或询问,输入的格式与题目所述一致,请参见样例。
    我们称上述给定的修改或询问为标准操作
  • 之后给定一个整数 tt,并且之后的 tt 行每行给定两个正整数 aia_ibib_i,这里的下标 ii 依次记为 11tt

你需要对初始值全为零的长度为 nn 的序列做总计 t×qt \times q 次操作。
其中第 ((i1)q+j)\big((i-1)q + j\big) 次操作形如第 ((ai+jbi)modq+1)\big((a_i + j b_i) \bmod q + 1\big) 个给定的标准操作(1it1 \le i \le t1jq1 \le j \le q)。


输出格式

输出一个整数,表示所有询问答案的累计和。

因为答案可能很大,只要求输出其结果关于 p=107+19p = 10^7 + 19 取模后的值。

注意:若最终的累计和 ans\text{ans} 小于零,你应该输出 ((ansmodp)+p)modp\big((\text{ans} \bmod p) + p\big) \bmod p


样例

输入

7
28
6
4 -192321079
3 418379342
1 3 189801569
3 -840249197
4 -751917965
3 649799919
1 5 -92666141
6
4 451258008
5 1
4 696880327
3 772574465
6
4 301010289
3 480168068
5 3
5 2
4 840536237
5 5
5 4
1 7 -792284106
2 604521872
3 966540578
2 -381646699
3 -939378260
2 -20129935
6
2
0 1
197 199

输出

2816930

数据范围与提示

  • 子任务 15050 分):
    1n5000001 \le n \le 5000001q1051 \le q \le 10^51t51 \le t \le 5,所有在输入中出现的 val\text{val} 满足 109val109-10^9 \le \text{val} \le 10^9,所有 aia_ibib_i 满足 0ai,bi1090 \le a_i, b_i \le 10^9

  • 子任务 25050 分):
    1n1091 \le n \le 10^91q1051 \le q \le 10^51t1001 \le t \le 100,所有在输入中出现的 val\text{val} 满足 109val109-10^9 \le \text{val} \le 10^9,所有 aia_ibib_i 满足 0ai,bi1090 \le a_i, b_i \le 10^9