問題文

IncDecJmp は以下の 3 つの命令のみからなるプログラミング言語です。

  • INC(x)\mathrm{INC}(x) : xx11 増やし次の行へ進む。
  • DEC(x)\mathrm{DEC}(x) : x>0x > 0 ならば xx11 減らし次の行へ進む。x0x \leq 0 ならば何もせず次の行へ進む。
  • JMP(x,i)\mathrm{JMP}(x, i) : x>0x > 0 ならば ii 行目へ進む。x0x \leq 0 ならば次の行へ進む。

プログラムの例:

IncDecJmp で書かれた以下のプログラムについて、変数を (A,B)(0,2)(A, B) \leftarrow (0, 2) と初期化して実行した場合の挙動を示します。

 1: INC(A)
 2: DEC(B)
 3: JMP(B, 1)
  • 最初の変数の値は (A,B)=(0,2)(A, B) = (0, 2) である。
  • 1 行目が実行される。(A,B)=(1,2)(A, B) = (1, 2) となる。
  • 2 行目が実行される。(A,B)=(1,1)(A, B) = (1, 1) となる。
  • 3 行目が実行される。B>0B > 0 なので 1 行目にジャンプする。
  • 1 行目が実行される。(A,B)=(2,1)(A, B) = (2, 1) となる。
  • 2 行目が実行される。(A,B)=(2,0)(A, B) = (2, 0) となる。
  • 3 行目が実行される。B=0B = 0 なので何もしない。
  • プログラムが停止する。最終的な変数の値は (A,B)=(2,0)(A, B) = (2, 0) である。

非負整数 NN が与えられます。IncDecJmp で書かれた以下のプログラムについて、変数を (A,B,C,D,E)(0,0,0,0,N)(A,B,C,D,E) \leftarrow (0,0,0,0,N) と初期化してプログラムを実行します。プログラムが停止したときの変数 DD の値を求めてください。

 1: INC(B)
 2: DEC(A)
 3: JMP(A, 1)
 4: INC(A)
 5: INC(A)
 6: DEC(B)
 7: JMP(B, 4)
 8: DEC(C)
 9: JMP(C, 1)
10: INC(C)
11: DEC(A)
12: JMP(A, 10)
13: DEC(D)
14: JMP(D, 1)
15: INC(D)
16: DEC(C)
17: JMP(C, 15)
18: DEC(E)
19: JMP(E, 1)

答えは非常に大きくなることがあるので、答えを 998244353998244353 で割った余りを出力してください。

なお本問の制約下でプログラムが停止することが証明できます。

制約

  • 0N2×1050 \leq N \leq 2 \times 10^5
  • NN は整数

入力

入力は以下の形式で標準入力から与えられます。

NN

出力

答えを 998244353998244353 で割った余りを出力してください。

最後に改行してください。

サンプル

入力1
2
出力1
4

答えを 998244353998244353 で割った余りを出力することに注意してください。

Submit


Go (1.21)