NAPC 2025 OPEN 2026/03/27 09:00 ~ 2026/03/27 14:15 5:15:00.000

L Grade Up

問題
制限時間: 2 sec メモリ制限: 2048 MB
problem
ストーリー

プログラミング言語APLには (Grade Up) という、配列を昇順に並べ替えたときの各要素の元の位置を返す関数があります。

問題文

$(1,2,\ldots,M)$ の順列 $A = (A_1, A_2, \dots, A_M)$ に対し、順列 $f(A)$ を以下の条件を満たす順列 $P=(P_1,P_2,\ldots,P_M)$ として定義します。

  • $i=1,2,\ldots,M$ について、 $A_{P_i}=i$ が成り立つ。

例えば、$A=(5,1,2,3,4,6)$ のとき、 $f(A) = (2, 3, 4, 5, 1, 6)$ となります。

関数 $f$ の $n$ 回の反復適用を $f^n$ と表します。すなわち、 $f^0(A)=A$ であり、 $n\geq 1$ に対して $f^n(A) = f(f^{n-1}(A))$ です。

整数 $N,K$ が与えられます。 $(1, 2,\dots, N)$ の順列 $B$ のうち、$f^K(B)=B$ を満たすものは何通りあるかを求めてください。答えは大きくなることがあるので、答えを $998244353$ で割ったあまりを出力してください。

制約
  • 入力はすべて整数
  • $1 \le N \le 2\times10^5$
  • $1 \le K \le 2\times10^5$
入力

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

$N$ $K$
出力

答えを $998244353$ で割ったあまりを出力してください。

入力例 1
3 2
出力例 1
6

例えば、$B=(3,1,2)$ の場合を考えます。 $f((3, 1, 2))=(2,3,1)$ であり、$f((2,3,1))=(3, 1, 2)$ となるため、 $f^2((3, 1, 2))=(3,1,2)$ となり条件を満たします。