[yLOI2018] 不老梦

题目背景

> 于万人中万幸得以相逢,刹那间澈净明通。 > 成为我所向披靡的勇气和惶恐,裂山海,堕苍穹。 ——银临《不老梦》。 本题原名《毒瘤分块题》。

题目描述

扶苏非常喜欢一边听古风歌一边写毒瘤分块题。所以这个题的题面恶意卡了分块。 给你一个序列,这个序列中的每个数字有三个参数 $v_i,a_i,b_i$。这个序列中的数有一个非常神奇的有关时间的性质:每过一个时刻,序列中第 $i$ 个数字的值 $v_i$ 会增加 $a_i \times b_i$。 现在扶苏会对你做出一些询问和对序列进行一些修改。每次操作形如: - 查询第 $t$ 时刻区间 $[l,r]$ 的 $v$ 之和是多少。 - 在第 $t$ 时刻修改区间 $[l,r]$ 内的 $a$,将之整体加上一个整数 $x$。 - 在第 $t$ 时刻修改区间 $[l,r]$ 内的 $b$,将之整体加上一个整数 $y$。 - 在第 $t$ 时刻修改区间 $[l,r]$ 内的 $v$,将之整体加上一个整数 $z$。 规定初始时刻为时刻 $0$。

输入输出格式

输入格式


每个测试点有且仅有一组测试数据。 输入的第一行是两个用空格隔开的整数,分别代表序列的长度 $n$ 以及操作的个数 $m$。 下面 $n$ 行,每行 $3$ 个用空格隔开的整数,第 $i$ 行的整数 $v_i,a_i,b_i$ 分别代表第 $i$ 个位置的三个参数。 下面 $m$ 行,每行第一个数是 $opt$,代表操作的种类。 - 对于 $opt = 1$ 的情况,代表对序列进行一次查询。 $opt$ 后有三个用空格隔开的整数 $t, x, y$,代表查询时刻 $t$ 区间 $[x,y]$ 中 $v$ 的和。 - 对于 $opt = 2$ 的情况,代表对序列的 $a$ 值进行一次修改。$opt$ 后有四个用空格隔开的整数 $t, x, y, z$,代表在第 $t$ 时刻将区间 $[x,y]$ 中 $a$ 的值加上 $z$。 - 对于 $opt = 3$ 的情况,代表对序列的 $b$ 值进行一次修改。$opt$ 后有四个用空格隔开的整数 $t, x, y, z$,代表在第 $t$ 时刻将区间 $[x,y]$ 中 $b$ 的值加上 $z$。 - 对于 $opt = 4$ 的情况,代表对序列的 $v$ 值进行一次修改。$opt$ 后有四个用空格隔开的整数 $t, x, y, z$,代表在第 $t$ 时刻将区间 $[x,y]$ 中 $v$ 的值加上 $z$。 数据保证参数 $t$ 是单调递增的,不存在同一时刻有超过一种查询或询问。

输出格式


对于每次查询操作,输出一个一行一个整数,代表查询的答案对 $10^8 + 7$ 取模的答案。

输入输出样例

输入样例 #1

5 5
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
2 1 1 3 2 
1 3 2 3
3 4 1 4 -3
4 5 1 3 -5
1 6 1 5

输出样例 #1

377
2708

说明

#### 【样例输入输出 1 解释】 ![qwq](https://cdn.luogu.com.cn/upload/pic/38337.png) --- #### 【数据规模与约定】 **本题共有 $17$ 个测试点,各测试点不等分。每个测试点的 $n$ 的规模如下表**。 | 测试点编号 | $n=$ | 测试点编号 | $n=$| | :--------: | :-------------------: | :--------: | :-------------------: | | $1$ | $6$ | $10$ | $10^5 + 2$ | | $2$ | $10$ | $11$ | $1.5 \times 10^5 + 2$ | | $3$ | $100$ | $12$ | $10^5 + 3$ | | $4$ | $10^3$ | $13$ | $1.5 \times 10^5 + 3$ | | $5$ | $3 \times 10^3$ | $14$ | $2 \times 10^5 + 4$ | | $6$ | $3 \times 10^3$ | $15$ | $5 \times 10^4 + 5$ | | $7$ | $10^4 + 1$ | $16$ | $10^5 + 5$ | | $8$ | $10^5 + 1$ | $17$ | $2 \times 10^5 + 5$ | | $9$ | $1.5 \times 10^5 + 1$ | **各测试点分值**: - 对于第 $1$ 到第 $14$ 个测试点,每个测试点 $5$ 分。 - 对于第 $15$ 到第 $17$ 个测试点,每个测试点 $10$ 分。 **各测试点 $m$ 的取值**: - 对于测试点 $1$,$m = 10$。 - 对于测试点 $2$,$m = 50$。 - 对于第 $3$ 到第 $17$ 个测试点,$m = n$。 **各测试点特殊性质**: - 对于所有 $n$ 末位数字为 $6$ 的测试点,满足性质:操作所用到的时刻从 $1$ 开始,每次增加 $1$。 - 对于所有 $n$ 末位数字为 $1$ 的测试点,满足性质:所有修改操作只涉及对 $a$ 的修改,且修改区间 $x = y$。 - 对于所有 $n$ 末位数字为 $2$ 的测试点,满足性质:所有修改操作只涉及对 $a$ 的修改。 - 对于所有 $n$ 末位数字为 $3$ 的测试点,满足性质:所有修改操作不涉及对 $v$ 的修改,且对于 $b$ 的修改满足 $x= y$。 - 对于所有 $n$ 末位数字为 $4$ 的测试点,满足性质:不存在修改操作。 对于全部的测试点,保证 $1 \leq x \leq y \leq n$,$1 \leq op \leq 4$,给出的所有数字都在 32 位带符号整形的范围内,$t$ 为正数,且按照严格的升序给出。 --- #### 【提示】 - 请注意数据读入对程序效率造成的影响。 - 请注意常数因子对程序效率造成的影响。 - $n$ 的末位数字可以帮助你快速判断测试点的特殊性质。 - 当你的答案为负时,请将其取模成非负数后再进行输出。