#P16134. [ICPC 2018 NAIPC] Recovery

[ICPC 2018 NAIPC] Recovery

题目描述

考虑一个 n×mn \times m 的 0-1 矩阵。例如,下面这个 4×44 \times 4 矩阵:

$$\begin{aligned} 1\ 1\ 1\ 1 \\ 0\ 1\ 1\ 1 \\ 0\ 1\ 1\ 1 \\ 0\ 1\ 1\ 0 \end{aligned}$$

我们可以计算每一行和每一列的偶校验。在这个例子中,行的校验结果为 [0,1,1,0][0, 1, 1, 0],列的校验结果为 [1,0,0,1][1, 0, 0, 1](如果某行或某列中 1 的个数为奇数,则校验结果为 1;如果为偶数,则校验结果为 0)。注意,第一行是第 1 行,最后一行是第 nn 行,最左边一列是第 1 列,最右边一列是第 mm 列。

假设我们丢失了原始矩阵,只保留了行和列的校验结果。我们能否恢复原始矩阵?遗憾的是,无法唯一地恢复原始矩阵,但在某些约束条件下,我们可以唯一地恢复一个符合条件的矩阵。首先,恢复出的矩阵必须包含尽可能多的 1。其次,在所有包含最多 1 的恢复矩阵中,选择将第 1 行、第 2 行、第 3 行……按顺序拼接后得到的二进制数最小的那个。

输入格式

每个输入包含单个测试用例。请注意,你的程序可能会在不同输入上多次运行。每个测试用例恰好包含两行。第一行包含一个字符串 RR1R501 \leq |R| \leq 50),仅由字符 0 和 1 组成,按顺序表示行的校验结果。第二行包含一个字符串 CC1C501 \leq |C| \leq 50),仅由字符 0 和 1 组成,按顺序表示列的校验结果。

输出格式

如果能够在给定约束下恢复原始矩阵,则输出 R|R| 行,每行恰好 C|C| 个字符,仅由 0 和 1 组成,表示恢复出的矩阵。如果无法恢复,则输出 1-1

0110
1001
1111
0111
1110
1111
0
1
-1
11
0110
1011
1101

提示

翻译由 DeepSeek V3.2 完成