#CF2233E2. 排列传输(困难版)
排列传输(困难版)
题目描述
这是本题的困难版。本版本中, 及所有测试组 的总和上限均为 ,测试组数上限为 。
原本有一个大小为 的排列 。发送时,先把每个 的第 位组成一个长度为 的 01 串发送,再发送第 位,依此类推,直到 的最高有效位。
你收到了这些字符串,但它们对应哪一位的信息已经丢失,也就是这些字符串的顺序被任意打乱。请判断可能的原排列 有多少个。如果数据已经损坏,可能不存在合法排列。
输入格式
第一行包含整数 ,表示测试组数。
每组测试数据第一行包含整数 。
接下来 行,每行是一个长度为 的 01 串,表示收到的数据。
输出格式
对每组测试数据,输出一个整数,表示可能的原排列数量。
数据范围
- 所有测试组的 之和不超过
样例 1 输入
2
1
1
2
10
01
样例 1 输出
1
2
提示
在第一个示例中,可能只有一种排列,。
在第二个示例中,有 种可能的变体: 和 。
在第四个示例中,没有合适的原始排列。
来源
Codeforces Round 2233 E2 - Permutation Transmission (Difficult Version)