#P16314. [ICPC 2023 Jinan R] 来自知识的礼物

[ICPC 2023 Jinan R] 来自知识的礼物

题目描述

在学习完由理查德·彭和桑托什·文帕拉编写的论文《Solving Sparse Linear Systems Faster than Matrix Multiplication》后,小青鱼变得痴迷于一切稀疏的东西,比如稀疏矩阵。在这里,一个稀疏矩阵指零项的数量远高于非零项的矩阵。现在,小青鱼想到了一个有关二进制稀疏矩阵的问题,希望您能着手解决。

给定一个 rrcc 列的二进制矩阵(一个仅包含 0011 的矩阵),对于每一行您可以选择是否进行反转。求选择一些行进行反转的方案数(允许不选择任何行),使得每一列至多有一个 11。称两种方案是不同的,若有一行在其中一种方案里被选择,而在另一种方案里没有被选择。

本题中,反转一行的含义是这样的:设第 ii 行从第一列到最后一列的元素依次为 bi,1,bi,2,,bi,cb_{i, 1}, b_{i, 2}, \cdots, b_{i, c}。如果您反转了第 ii 行,则它将变为 bi,c,bi,c1,,bi,1b_{i, c}, b_{i, c - 1}, \cdots, b_{i, 1}

输入格式

有多组测试数据。第一行输入一个整数 TT 表示测试数据组数,对于每组测试数据:

第一行输入两个整数 rrcc1r,c1061 \le r, c \le 10^61r×c1061 \le r \times c \le 10^6)表示矩阵的行数和列数。

对于接下来 rr 行,第 ii 行输入一个字符串 bi,1bi,2bi,cb_{i,1}b_{i,2}\cdots b_{i,c}bi,j{0,1}b_{i,j} \in \{0, 1\}),其中 bi,jb_{i,j} 表示矩阵第 ii 行第 jj 列的元素。

保证所有数据 r×cr\times c 之和不超过 10610^6

输出格式

每组数据输出一行一个整数表示方案数。由于答案可能很大,请将答案对 (109+7)(10^9 + 7) 取模后输出。

3
3 5
01100
10001
00010
2 1
1
1
2 3
001
001
4
0
2

提示

对于第一组样例数据,选择的行的集合可以是空集,{1,3}\{1, 3\}{2}\{2\}{1,2,3}\{1, 2, 3\}。所以答案是 44