CF1466F Euclid's nightmare

题目描述

给定包含 $n$ 个 $m$ 维向量的向量集 $S$,每个向量 $\overrightarrow{a}$ 满足 $a_i\in \{0,1\}$ 且 $\sum\limits_{i=1}^ma_i\in\{1,2\}$。定义向量加法 $\overrightarrow{c}=\overrightarrow{a}+\overrightarrow{b}$ 为 $\forall i\in \Z\cap[1,m], c_i=a_i\oplus b_i$,其中 $\oplus$ 表示异或运算。 求极大线性空间 $T$ 使得 $T$ 的一组基 $A$ 均为 $S$ 中元素。输出 $|T|,|A|$ 对 $10^9+7$ 取模的结果,以及 $A$。 要求在 $|A|$ 最小前提下 $A$ 关于向量编号字典序最小。

输入格式

第一行两个整数 $n,m$($1\le n,m \le 5 \times 10^5$)。 以下 $n$ 行,每行先输入 $\sum\limits_{i=1}^ma_i$,接下来输入 $\sum\limits_{i=1}^ma_i$ 个数字 $k$ 表示 $a_k=1$。

输出格式

第一行输出 $|T|$ 和 $|A|$ 对 $10^9+7$ 取模的结果。 第二行输出 $A$ 的每个向量,按编号从小到大排序并只需输出编号。

说明/提示

在第一个样例中,给定三个向量: - $10$ - $01$ - $11$ 我们可以用这些向量表示出 $2$ 维空间中的所有向量: - $00$ 是上述向量的空子集之和; - $01 = 11 + 10$,是第一个向量和第三个向量之和; - $10 = 10$,就是第一个向量; - $11 = 10 + 01$,是第一个向量和第二个向量之和。 因此,$T = \{00, 01, 10, 11\}$。我们可以从 $S$ 的三个向量中任选两个,仍然能够得到 $T$ 中的所有向量。在这种情况下,我们选择输入中最先出现的两个向量。由于仅使用 $S$ 中的一个向量无法得到 $T$ 中的所有向量,所以 $|S'| = 2$,且 $S' = \{10, 01\}$(下标为 $1$ 和 $2$),因为集合 $\{1, 2\}$ 字典序最小。如下所示,仅使用 $S'$ 中的向量就可以表示出 $T$ 中的所有向量: - $00$ 是空子集之和; - $01 = 01$,就是第二个向量; - $10 = 10$,就是第一个向量; - $11 = 10 + 01$,是第一个向量和第二个向量之和。