atcoder#ARC141B. [ARC141B] Increasing Prefix XOR

[ARC141B] Increasing Prefix XOR

题目描述

正整数 N, M N,\ M が与えられます。

長さ N N の正整数列 A=(A1, A2, , AN) A=(A_1,\ A_2,\ \dots,\ A_N) であって、以下の条件を満たすものの個数を 998244353 998244353 で割った余りを求めてください。

  • 1  A1 < A2 <  < AN  M 1\ \leq\ A_1\ <\ A_2\ <\ \dots\ <\ A_N\ \leq\ M
  • $ B_i\ =\ A_1\ \oplus\ A_2\ \oplus\ \dots\ \oplus\ A_i $ としたとき、 B1 < B2 <  < BN B_1\ <\ B_2\ <\ \dots\ <\ B_N

ただしここで、 \oplus はビット単位 XOR \mathrm{XOR} 演算を表します。

ビット単位 XOR \mathrm{XOR} 演算とは 非負整数 A, B A,\ B のビット単位 XOR \mathrm{XOR} A  B A\ \oplus\ B は、以下のように定義されます。

  • A  B A\ \oplus\ B を二進表記した際の 2k 2^k (k  0 k\ \geq\ 0 ) の位の数は、A, B A,\ B を二進表記した際の 2k 2^k の位の数のうち一方のみが 1 1 であれば 1 1 、そうでなければ 0 0 である。

例えば、3  5 = 6 3\ \oplus\ 5\ =\ 6 となります (二進表記すると: 011  101 = 110 011\ \oplus\ 101\ =\ 110 )。
一般に k k 個の非負整数 p1, p2, p3, , pk p_1,\ p_2,\ p_3,\ \dots,\ p_k のビット単位 XOR \mathrm{XOR} は $ (\dots\ ((p_1\ \oplus\ p_2)\ \oplus\ p_3)\ \oplus\ \dots\ \oplus\ p_k) $ と定義され、これは p1, p2, p3, , pk p_1,\ p_2,\ p_3,\ \dots,\ p_k の順番によらないことが証明できます。

输入格式

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

N N M M

输出格式

答えを出力してください。

题目大意

给定 m,nm,n,希望构造长度为 mm 的数列 aa 满足条件:

  • 1a1<a2<amn1\le a_1<a_2<\dots a_m\le n

  • bi=j=1ib_i=\oplus_{j=1}^i,那么 bb 是单增的。

求方案个数。

2 4
5
4 4
0
10 123456789
205695670

提示

制約

  • 1  N  M < 260 1\ \leq\ N\ \leq\ M\ <\ 2^{60}
  • 入力される値はすべて整数

Sample Explanation 1

例えば (A1, A2)=(1, 3) (A_1,\ A_2)=(1,\ 3) とすると A1 < A2 A_1\ <\ A_2 であり、B1=A1=1, B2=A1 A2=2 B_1=A_1=1,\ B_2=A_1\oplus\ A_2=2 より B1 < B2 B_1\ <\ B_2 が成り立つので条件を満たします。 この他には $ (A_1,\ A_2)=(1,\ 2),\ (1,\ 4),\ (2,\ 4),\ (3,\ 4) $ が条件を満たします。