#P12824. 缺失的子序列

缺失的子序列

缺失的子序列

Problem Description

定义一个长为 nn 的排列 p1,p2,,pnp_1,p_2,\dots,p_n 是好的,当且仅当排列中不存在一组 1i1<i2<i3<i4n1\leq i_1 < i_2 < i_3 < i_4 \leq n,使得 pi3<pi1<pi4<pi2p_{i_3} < p_{i_1} < p_{i_4} < p_{i_2}pi2<pi4<pi1<pi3p_{i_2} < p_{i_4} < p_{i_1} < p_{i_3}。 cats 有 nn 个集合 S1,S2,,SnS_1,S_2,\dots,S_n,其中每个集合 SiS_i 都是 {1,2,,n}\{1,2,\dots,n\} 的子集。现在,cats 想知道有多少长为 nn 的好的排列 p1,p2,,pnp_1,p_2,\dots,p_n,使得对于任意的 1in1\leq i\leq n,都有 piSip_i \in S_i。由于答案可能很大,你只需要输出答案对 109+710^9 + 7 取模的结果。

Input

第一行包含一个整数 TT1T10001\leq T \leq 1000),表示一共有 TT 组测试数据。 对于每组测试数据: 第一行为一个整数 nn1n1001\leq n\leq 100),表示排列的长度。 接下来 nn 行,每行为一个长度为 nn0101 字符串,表示第 ii 个集合 SiS_i。其中第 ii 行第 jj 个字符为 00 代表 jSij \notin S_i,第 ii 行第 jj 个字符为 11 代表 jSij \in S_i。 保证所有测试数据的 n3n^3 之和不超过 51065\cdot 10^6

Output

对于每组测试数据,输出一个整数,表示所有满足条件的排列 pp 的总数对 109+710^9 + 7 取模的结果。

Sample Input

4
1
1
4
1111
1111
1111
1111
5
11111
10001
10101
10001
11111
13
1111110111111
1111111111111
0111110101111
1111111111011
1111110011111
1111111111111
1011110111011
1111100011111
1111101111111
1110111111111
1100111111111
1111111011101
1111101111111

Sample Output

1
22
2
4045764

Source

2025“钉耙编程”中国大学生算法设计暑期联赛(6)