G. Shenchuan想考一道数学题

    Type: Default 1000ms 256MiB

Shenchuan想考一道数学题

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

Problem Description

Shenchuan希望以维护一个长度为 nn 的数组,这个数组的下标为从 11 到 nn 的正整数。

一共有 mm 个操作,可以分为两种:

  • 0 l r 表示将第 ll 个到第 rr 个数( al,al+1...ara_l,a_{l+1} ...a_r)中的每一个数 aia_i 替换为 caic^{a_i},即 cc 的 aia_i 次方,其中 cc 是输入的一个常数,也就是执行赋值 ai=caia_i = c^{a_i}。

  • 1 l r 求第 ll 个到第 rr 个数的和,也就是输出: ∑i=lrai\sum_{i=l}^{r}a_i

因为这个结果可能会很大,所以你只需要输出结果  mod  p\bmod \space p 的值即可。

Input Format

第一行有四个整数 n,m,p,cn, m, p, c,所有整数含义见问题描述。
接下来一行 nn 个整数,表示 aa 数组的初始值。
接下来 mm 行,每行三个整数,其中第一个整数表示了操作的类型。

  • 如果是 00 的话,表示这是一个修改操作,操作的参数为 l,rl, r。
  • 如果是 11 的话,表示这是一个询问操作,操作的参数为 l,rl, r。

Output Format

对于每个询问操作,输出一行,包括一个整数表示答案  mod  p\bmod \space p 的值。

Sample

样例输入 #1

4 4 7 2
1 2 3 4
0 1 4
1 2 4
0 1 4
1 1 3

样例输出 #1

0
3

样例输入 #2

1 40 19910626 2
0
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1
0 1 1
1 1 1

样例输出 #2

1
2
4
16
65536
11418102
18325590
13700558
13700558
13700558
13700558
13700558
13700558
13700558
13700558
13700558
13700558
13700558
13700558
13700558

Hint

1≤n,m≤5×1041\le n,m \le 5\times 10^4,1≤p≤1081 \le p \le 10^8,0<c<p0< c < p,0≤ai<p0 \le a_i < p。