AT_waipc_qual_e XOR and Shift
题目描述
黑板上写有 $M$ 个长度为 $2^N$ 的非负整数序列。第 $i$ 个($1 \leq i \leq M$)序列为 $A_i = (A_{i,1},A_{i,2},\ldots,A_{i,2^N})$。
你可以按任意顺序,任意次数地进行以下两种操作:
- 任意选择黑板上的一个序列,将其左移一位,并将新得到的序列也写到黑板上。更准确地说,若选择序列 $x = (x_1,x_2,\ldots,x_{2^N})$,则新写入的为 $(x_2,\ldots,x_{2^N},x_1)$。
- 任意选择黑板上的两个序列(可以相同),将它们各个位置分别按位异或,将新结果序列写到黑板上。更准确地说,若选择序列 $x = (x_1,\ldots,x_{2^N})$ 和 $y = (y_1,\ldots,y_{2^N})$,则新写入的为 $(x_1 \oplus y_1, x_2 \oplus y_2, \ldots, x_{2^N} \oplus y_{2^N})$。
请注意,无论哪种操作,被选的序列都不会被消去。
请你计算,最终能在黑板上写出的不同序列种类有多少种,并输出其对 $998244353$ 取模的结果。
按位 $\mathrm{XOR}$ 运算指,对于非负整数 $A,B$ 的按位 $\mathrm{XOR}$,即 $A \oplus B$,定义如下:
- 表达 $A \oplus B$ 的二进制中,$2^k$($k \geq 0$)位上的数字,只有当 $A,B$ 的该位中有且只有一个是 $1$ 时,该位为 $1$,否则为 $0$。
例如,$3 \oplus 5 = 6$(二进制为 $011 \oplus 101 = 110$)。
一般地,$k$ 个非负整数 $p_1, p_2, ..., p_k$ 的按位 $\mathrm{XOR}$ 可定义为 $(...((p_1 \oplus p_2) \oplus p_3) \oplus ... \oplus p_k)$,且可以证明其结果与顺序无关。
输入格式
输入按如下格式从标准输入给出:
> $N$ $M$
> $A_{1,1}$ $A_{1,2}$ $\ldots$ $A_{1,2^N}$
> $A_{2,1}$ $A_{2,2}$ $\ldots$ $A_{2,2^N}$
> $\vdots$
> $A_{M,1}$ $A_{M,2}$ $\ldots$ $A_{M,2^N}$
输出格式
请输出答案。
说明/提示
### 样例解释 1
你可以通过如下步骤得到 $4$ 种不同的序列:
- 初始时,黑板上只有 $(1,2)$。
- 选择 $(1,2)$ 与自身异或,可以写出 $(0,0)$。
- 选择 $(1,2)$ 左移,可以写出 $(2,1)$。
- 选择 $(1,2)$ 与 $(2,1)$ 异或,可以写出 $(3,3)$。
### 数据范围
- $1 \leq N \leq 16$
- $1 \leq M \leq 8$
- $0 \leq A_{i,j} < 256$
- 输入均为整数。
由 ChatGPT 5 翻译