atcoder#ARC133E. [ARC133E] Cyclic Medians

[ARC133E] Cyclic Medians

配点 : 800800

問題文

整数 N,M,V,AN,M,V,A が与えられます. 次のような操作を考えます.

  • 11 以上 VV 以下の整数からなる長さ NN の整数列 x=(x1,x2,,xN)x=(x_1,x_2,\cdots,x_N) を選ぶ.
  • 11 以上 VV 以下の整数からなる長さ MM の整数列 y=(y1,y2,,yM)y=(y_1,y_2,\cdots,y_M) を選ぶ.
  • 変数 aa を用意する.最初,a=Aa=A とする.
  • i=0,1,,N×M1i=0,1,\cdots,N \times M-1 に対して,以下の動作を行う.- aa の値を,a,x(imodN)+1,y(imodM)+1a,x_{(i \bmod N)+1},y_{(i \bmod M)+1} の中央値で置き換える.
  • aa の値を,a,x(imodN)+1,y(imodM)+1a,x_{(i \bmod N)+1},y_{(i \bmod M)+1} の中央値で置き換える.
  • 最終的な aa の値を出力する.

整数列 x,yx,y としてありうるものをすべて試したとき,操作によって出力される値の総和を 998244353998244353 で割った余りを求めてください.

制約

  • 1N,M2000001 \leq N,M \leq 200000
  • 1AV2000001 \leq A \leq V \leq 200000
  • 入力される値はすべて整数である

入力

入力は以下の形式で標準入力から与えられる.

NN MM VV AA

出力

答えを出力せよ.

2 1 2 1
11

例えば,x=(1,2),y=(2)x=(1,2),y=(2) の時,操作の様子は以下のようになります.

  • a=1a=1 と初期化する.
  • i=1i=1: aa の値を,a(=1),x1(=1),y1(=2)a(=1),x_1(=1),y_1(=2) の中央値,すなわち 11 で置き換える.
  • i=2i=2: aa の値を,a(=1),x2(=2),y1(=2)a(=1),x_2(=2),y_1(=2) の中央値,すなわち 22 で置き換える.
  • a(=2)a(=2) を出力.

最終的に 22 が出力されるのは,(x=(1,2),y=(2))(x=(1,2),y=(2))(x=(2,1),y=(2))(x=(2,1),y=(2))(x=(2,2),y=(2))(x=(2,2),y=(2))33 ケースで,それ以外の 55 ケースではすべて 11 が出力されます. よって求める答えは,2×3+1×5=112 \times 3 + 1\times 5=11 です.

2 2 5 4
2019
2100 2300 2201 2022
407723438