311382: CF1977D. XORificator

Memory Limit:256 MB Time Limit:2 S
Judge Style:Text Compare Creator:
Submit:0 Solved:0

Description

D. XORificatortime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard output

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.

Input

Each 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$.

Output

For 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.

ExampleInput
5
3 4
1010
0110
0100
1 1
1
1 1
0
2 5
00101
10110
3 3
101
111
000
Output
3
010
1
0
1
1
3
00
2
010
Note

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

题目大意:给你一个由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行。
- 如果存在多个有效的异或器配置达到最优答案,可以输出其中任意一个。题目大意:给你一个由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行。 - 如果存在多个有效的异或器配置达到最优答案,可以输出其中任意一个。

加入题单

上一题 下一题 算法标签: