#P13626. [ICPC 2024 APC] XOR Operations

[ICPC 2024 APC] XOR Operations

题目描述

给定 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n。你有一个包含 nn 个整数的序列 B=(b1,b2,,bn)B=(b_1, b_2, \dots, b_n),初始时所有元素均为零。

在一次操作中,你选择两个不同的下标 iijj,然后同时

  • bib_i 替换为 biaiajb_i \oplus a_i \oplus a_j,并且
  • bjb_j 替换为 bjaiajb_j \oplus a_i \oplus a_j

注意,\oplus 代表按位异或(bitwise XOR)操作。对于两个整数,其操作结果整数的每个二进制位,当且仅当两个操作数对应的二进制位有且仅有一个为 11 时,该位为 11。例如,310=93 \oplus 10 = 9,因为 (0011)2(1010)2=(1001)2(0011)_2 \oplus (1010)_2 = (1001)_2

你想要计算通过零次或多次操作可以得到的不同序列 BB 的数量。由于这个数字可能非常大,请计算结果对 998,244,353998,244,353 取模。

两个长度为 nn 的序列被认为是不同的,当且仅当存在一个下标 ii (1in1 \le i \le n),使得一个序列的第 ii 个元素与另一个序列的第 ii 个元素不同。

输入格式

输入的第一行包含一个整数 nn (2n200,0002 \le n \le 200,000)。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n (0ai<2300 \le a_i < 2^{30})。

输出格式

输出一个整数,代表可以得到的不同序列 BB 的数量,结果对 998,244,353998,244,353 取模。

3
1 2 1
4
4
852415 852415 852415 852415
1

提示

样例解释 #1

B=(0,0,0)B=(0,0,0) 开始,我们可以得到以下两个序列 BB

  • i=1i=1j=2j=2 执行操作。我们将得到 B=(3,3,0)B=(3,3,0)
  • 在此之后,对 i=2i=2j=3j=3 执行操作。我们将得到 B=(3,0,3)B=(3,0,3)

B=(0,0,0)B=(0,0,0) 开始,我们也可以得到以下序列 BB

  • i=2i=2j=3j=3 执行操作。我们将得到 B=(0,3,3)B=(0,3,3)

可以证明,(0,0,0)(0,0,0), (3,3,0)(3,3,0), (3,0,3)(3,0,3)(0,3,3)(0,3,3) 是唯一可能得到的序列 BB。因此,答案是 44