Nim游戏
题号:NC54837
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小F刚学习了博弈论,打算设计一个Nim游戏,去向同学炫耀一下。

小F有n个栈,第i栈中有ai个物品,其中的物品有bi种不同的排列方式。从 n 个栈里面选 k(>1) 个,其他的栈扔掉,任意决定这 k 个栈中物品的顺序,玩 Nim 游戏。

在游戏中,两人轮流操作。每人每次可以取走任意一个栈顶端的若干个物品。将所有物品取完的人赢。

因为小F要假装很大方地把先手让给同学,所以他希望设计出一个后手必胜的Nim游戏。请问总共有几种不同的设计方案。

两个方案不同当且仅当存在一个栈仅出现在其中一个方案中或在两个方案中栈中物品的排列方式不同。

题意简述:求 n 个数里面任意选 k 个,使得这 k 个数的异或和为 0,求所有方案中 b 值之积的和。

输入描述:

第一行包括一个正整数n。

接下来n行,每行两个正整数ai,bi。

输出描述:

输出一个正整数。表示不同的方案数。答案对998244353取模。
示例1

输入

复制
3
1 1
2 2
3 3

输出

复制
6

备注:

1≤n≤107

1≤ai,bi≤105