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 翻译