/
Time Limit: 3 sec / Memory Limit: 1024 MiB
配点 : 100 点
問題文
正整数 N, M が与えられます。
k = 1, 2, \dots, N + M - 1 に対して、以下の問題の答えを \mathrm{ans}_{k} とします。
長さ N + M - 1 の数列 a = (a_{1}, a_{2}, \dots , a_{N + M - 1}), b = (b_{1}, b_{2}, \dots, b_{N + M - 1}) の組 (a, b) であって、以下の条件をすべて満たすものを良い数列の組とします。
- (a_1,b_1)=(1, N+1)
- i=2,3,\dots, N+M-1 について、次のいずれかが成り立つ
- (a_i, b_i) = (a_{i - 1} + 1, b_{i - 1})
- (a_i, b_i) = (a_{i - 1}, b_{i - 1} + 1)
- (a_{N+M-1}, b_{N+M-1})=(N, N+M)
良い数列の組 (a, b) に対して、木 T(a, b) を以下の条件をすべて満たすものとして定めます。
- 頂点に 1 から N + M までの番号がついた N + M 頂点の木
- i = 1, 2, \dots, N + M - 1 について、頂点 a_{i} と頂点 b_{i} を結ぶ辺が存在する
木に対して頂点 i と頂点 j を結ぶ単純パスに含まれる辺の個数を \mathrm{dist}(i,j) とし、木のスコアを 1\leq i < j\leq N + M かつ \mathrm{dist}(i, j) = k を満たす整数の組 (i, j) の個数とします。
すべての良い数列の組 (a, b) に対する T(a, b) のスコアの総和を 998244353 で割ったあまりを求めてください。
\mathrm{ans}_1, \mathrm{ans}_2, \dots, \mathrm{ans}_{N+M-1} をすべて求め、\displaystyle \sum_{k = 1}^{N + M - 1} (\mathrm{ans}_{k}\oplus k) を出力してください。ここで、\oplus はビットごとの排他的論理和です。
ビットごとの排他的論理和とは
非負整数 A,B のビットごとの排他的論理和 (XOR) A \oplus B は、以下のように定義されます。
- A \oplus B を二進表記した際の 2^k \, (k \geq 0) の位の数は、A,B を二進表記した際の 2^k の位の数のうち一方のみが 1 であれば 1、そうでなければ 0 である。
制約
- 入力はすべて整数
- 1\leq N\leq 5\times 10^{6}
- 1\leq M\leq 5\times 10^{6}
入力
入力は以下の形式で与えられる。
N M
出力
答えを出力せよ。
入力例 1
2 2
出力例 1
14
(\mathrm{ans}_1,\mathrm{ans}_2,\mathrm{ans}_3) = (6, 4, 2) となるため、出力すべき値は、(6\oplus 1) + (4\oplus 2) + (2\oplus 3) = 7 + 6 + 1 = 14 です。
入力例 2
24 167
出力例 2
21925979855
入力例 3
4297614 4167924
出力例 3
4162418864110099