プログラミング言語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)$ として定義します。
例えば、$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$ で割ったあまりを出力してください。
入力は以下の形式で標準入力から与えられます。
$N$ $K$
答えを $998244353$ で割ったあまりを出力してください。
3 2
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)$ となり条件を満たします。