問題文
整数 M、長さ N の整数列 C=(C1,C2,…,CN)、および M×M の整数行列 W が与えられます。各 Ci は 0 以上 M−1 以下の整数です。
Q 個のクエリが与えられるので、順に処理してください。
クエリは以下の 4 種類です。
-
タイプ 1:1 l r xの形式で与えられる。
すべての整数 i=l,l+1,…,r について、Ci を次の値に変更する。
Ci←(Ci+x)modM
-
タイプ 2:2 l rの形式で与えられる。
次の値を 998244353 で割った余りを出力する。
l≤i<j≤r∑WCi,Cj
-
タイプ 3:3 l r xの形式で与えられる。
すべての整数 i=l,l+1,…,r について、Ci を次の値に変更する。
Ci←(Ci×x)modM
-
タイプ 4:4 l r a bの形式で与えられる。
区間 [l,r] に含まれる値 a と値 b をすべて入れ替える。
すなわち、次の操作を行う。
Ci←⎩⎨⎧baCi(Ci=a)(Ci=b)(Otherwise)
制約
- 1≤N≤2×105
- 1≤Q≤104
- 2≤M≤6
- 0≤Ci<M
- 0≤Wi,j<998244353
- 全てのタイプのクエリについて、1≤l≤r≤N
- タイプ 1 のクエリについて、0≤x<M
- タイプ 3 のクエリについて、0≤x<M
- タイプ 4 のクエリについて、0≤a<b<M
- 入力はすべて整数である
入力
入力は以下の形式で標準入力から与えられます。
各クエリは、以下のいずれかの形式で与えられます。
出力
タイプ 2 のクエリの個数を q として、q 行出力せよ。 i 行目には i 個目のタイプ 2 のクエリに対する答えを出力せよ。
入力例1
4 3
0 1 2 0
0 1 2
3 4 5
6 7 8
6
2 1 2
1 2 4 1
3 1 3 2
4 1 4 0 1
2 1 4
2 2 3
出力例1
はじめ、数列は C=(0,1,2,0) です。また、整数行列 W は次のようになっています。
W=036147258
1 つ目のクエリでは、C1,C2=(0,1) であり、答えは W0,1=1 です。
2 つ目のクエリでは、区間 [2,4] の各要素に 1 を加え、3 で割った余りに置き換えます。よって、数列は C=(0,2,0,1) となります。
3 つ目のクエリでは、区間 [1,3] の各要素を 2 倍し、3 で割った余りに置き換えます。よって、数列は C=(0,1,0,1) となります。
4 つ目のクエリでは、区間 [1,4] に含まれる値 0 と値 1 を入れ替えます。よって、数列は C=(1,0,1,0) となります。
5 つ目のクエリでは、答えは次のようになります。
1≤i<j≤4∑WCi,Cj=W1,0+W1,1+W1,0+W0,1+W0,0+W1,0 =3+4+3+1+0+3 =14