CF1672G Cross Xor

题目描述

有一个 $r$ 行 $c$ 列的网格,其中第 $i$ 行第 $j$ 列的格子上写有一个整数 $a_{i, j}$。最初,所有元素都被设置为 $0$。你可以进行如下操作: - 选择下标 $1 \le i \le r$ 和 $1 \le j \le c$,然后将第 $i$ 行或第 $j$ 列上的所有值与 $1$ 进行异或操作。也就是说,对于所有满足 $x=i$ 或 $y=j$ 或两者都满足的 $a_{x, y}$,将 $a_{x, y}$ 替换为 $a_{x, y} \oplus 1$。 你希望通过有限次上述操作,将网格变为 $b$。然而,$b$ 的某些元素缺失,被替换成了 '?'。 设 $k$ 为字符 '?' 的个数。在所有用 $0$ 或 $1$ 替换每个 '?' 的 $2^k$ 种填充方式中,统计有多少种填充方式可以通过有限次上述操作,从全 $0$ 的网格变为该填充后的 $b$。由于答案可能很大,请输出对 $998244353$ 取模的结果。

输入格式

第一行包含两个整数 $r$ 和 $c$($1 \le r, c \le 2000$),分别表示网格的行数和列数。 接下来的 $r$ 行,每行包含 $c$ 个字符 $b_{i, 1}, b_{i, 2}, \ldots, b_{i, c}$($b_{i, j} \in \{0, 1, ?\}$)。

输出格式

输出一个整数,表示可以通过有限次操作得到的填充方式的数量,对 $998244353$ 取模。

说明/提示

在第一个测试样例中,唯一可行的填充方式如下: 010111010 这可以通过选择 $(i, j) = (2, 2)$ 进行一次操作实现。 在第二个测试样例中,可以证明不存在任何操作序列能够得到该网格。 由 ChatGPT 4.1 翻译