311382: CF1977D. XORificator
Description
You are given a binary (consisting only of 0s and 1s) $n \times m$ matrix. You are also given a XORificator, using which you can invert all the values in a chosen row (i.e. replace 0 with 1 and 1 with 0).
A column in the matrix is considered special if it contains exactly one 1. Your task is to find the maximum number of columns that can be made special at the same time, and the set of rows the XORificator should be used on to achieve that.
InputEach test contains multiple test cases. The first line of input contains a single integer $t$ ($1 \le t \le 10^4$) — the number of test cases. The description of the test cases follows.
The first line of each test case contains two integers $n$ and $m$ ($1 \leq n, m \leq 3 \cdot 10^5$, $n \cdot m \leq 3 \cdot 10^5$).
Each of the following $n$ lines of the test case contains a binary string of length $m$.
It is guaranteed that the sum of $n \cdot m$ over all test cases does not exceed $3 \cdot 10^5$.
OutputFor each test case, output two lines.
In the first line, output the maximum number of special columns that is possible to get simultaneously.
In the second line, output a binary string of length $n$, where the $i$-th character is 0, if you don't use the XORificator on the $i$-th row, and 1, if you use the XORificator on the $i$-th row.
If there are multiple valid XORificator configurations that achieve the optimal answer, you can output any of them.
ExampleInput5 3 4 1010 0110 0100 1 1 1 1 1 0 2 5 00101 10110 3 3 101 111 000Output
3 010 1 0 1 1 3 00 2 010Note
In the first test case, you can use the XORificator on the second row to make the columns $2$, $3$, and $4$ special.
In the second test case, the only column is already special, so you don't need to use the XORificator.
Output
输入数据格式:
- 第一行包含一个整数t(1≤t≤10^4),表示测试用例的数量。
- 每个测试用例的第一行包含两个整数n和m(1≤n, m≤3*10^5,n*m≤3*10^5)。
- 接下来的n行,每行包含一个长度为m的二进制字符串。
输出数据格式:
- 对于每个测试用例,输出两行。
- 第一行输出可能同时变为特殊的最大列数。
- 第二行输出一个长度为n的二进制字符串,第i个字符如果是0,则表示不使用异或器翻转第i行,如果是1,则表示使用异或器翻转第i行。
- 如果存在多个有效的异或器配置达到最优答案,可以输出其中任意一个。题目大意:给你一个由0和1组成的n*m的矩阵,你有一个异或器,可以翻转选择行的所有值(即将0变成1,1变成0)。如果一列中恰好只有一个1,则这列是特殊的。你的任务是找到可以同时变为特殊的最大列数,以及为了达到这个目标需要使用异或器的行集合。 输入数据格式: - 第一行包含一个整数t(1≤t≤10^4),表示测试用例的数量。 - 每个测试用例的第一行包含两个整数n和m(1≤n, m≤3*10^5,n*m≤3*10^5)。 - 接下来的n行,每行包含一个长度为m的二进制字符串。 输出数据格式: - 对于每个测试用例,输出两行。 - 第一行输出可能同时变为特殊的最大列数。 - 第二行输出一个长度为n的二进制字符串,第i个字符如果是0,则表示不使用异或器翻转第i行,如果是1,则表示使用异或器翻转第i行。 - 如果存在多个有效的异或器配置达到最优答案,可以输出其中任意一个。