atcoder#ABC288H. [ABC288Ex] A Nameless Counting Problem

[ABC288Ex] A Nameless Counting Problem

配点 : 600600

問題文

下記の 22 つの条件をともに満たす長さ NN の整数列 A=(A1,A2,,AN)A = (A_1, A_2, \ldots, A_N) の個数を 998244353998244353 で割ったあまりを出力してください。

  • 0A1A2ANM0 \leq A_1 \leq A_2 \leq \cdots \leq A_N \leq M
  • A1A2AN=XA_1 \oplus A_2 \oplus \cdots \oplus A_N = X

ここで、\oplus はビットごとの排他的論理和を表します。

ビットごとの排他的論理和とは? 非負整数 A, B のビットごとの排他的論理和 A \oplus B は、以下のように定義されます。
  • A \oplus B を二進表記した際の 2^k (k \geq 0) の位の数は、A, B を二進表記した際の 2^k の位の数のうち一方のみが 1 であれば 1、そうでなければ 0 である。
例えば、3 \oplus 5 = 6 となります (二進表記すると: 011 \oplus 101 = 110)。

制約

  • 1N2001 \leq N \leq 200
  • 0M<2300 \leq M \lt 2^{30}
  • 0X<2300 \leq X \lt 2^{30}
  • 入力はすべて整数

入力

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

NN MM XX

出力

答えを出力せよ。

3 3 2
5

問題文中の 22 つの条件をともに満たす長さ NN の整数列 AA は、$(0, 0, 2), (0, 1, 3), (1, 1, 2), (2, 2, 2), (2, 3, 3)$ の 55 個です。

200 900606388 317329110
788002104