D 动态序列
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给出n(1 <= n <= 100000)个整数 ai(1 <= ai <= 1000000000)的序列,有q(1 <= q <= 100000)个询问,设序列长度为len,序号从1开始,每个询问有如下操作:

1 b:序列中所有数乘以整数b(1 <= b <= 1000000000

2 b:序列中所有数增加整数b(1 <= b <= 1000000000

3 b:在序列头部添加一个整数b(1 <= b <= 1000000000

4 b:在序列尾部添加一个整数b(1 <= b <= 1000000000

5 p:输出序列的第p(1 <= p <= len)个数,并将结果对1000000007取模

题目保证所有操作都是合法的!

输入描述:

第1行两个整数n、q,第2行n个整数,代表初始序列,第3行及之后,每一行都有一个询问,总共有q行,询问格式参见题目描述和样例

输出描述:

对于询问5,输出对应位置的数

示例1

输入

复制
5 5
1 2 3 4 5
1 2
2 1
3 1
4 2
5 3

输出

复制
5

说明

样例解释:

刚开始的序列:1 2 3 4 5

执行完操作1:2 4 6 8 10

执行完操作2:3 5 7 9 11

执行完操作3:1 3 5 7 9 11

执行完操作4:1 3 5 7 9 11 2

执行操作5:当前序列第3个数是5,所以输出5

备注: