#CF1054E. Chips Puzzle
Chips Puzzle
markdown
E. 芯片谜题
每个测试的时间限制: 秒
每个测试的内存限制: MB
输入:标准输入
输出:标准输出
Egor 想出了一个全新的芯片谜题,并邀请你来玩。
这个谜题是一个有 行 列的表格,每个格子中可以放若干个黑色或白色的芯片,它们排成一列。因此,每个格子的状态可以用一个由字符 '0'(白色芯片)和 '1'(黑色芯片)组成的字符串来描述(可能为空),整个谜题的状态可以表示为一个表格,其中每个格子是一个由 0 和 1 组成的字符串。任务是从谜题的一个状态变换到另一个状态。
你可以使用以下操作:
- 选择两个不同的格子 和 :这两个格子必须在同一行或同一列,并且格子 中的字符串必须非空;
- 在一次操作中,你可以将格子 中字符串的最后一个字符移动到格子 中字符串的开头。
Egor 为你准备了表格的两个状态:初始状态和最终状态。保证两个状态中 0 和 1 的总数相同。你的目标是通过若干次操作从初始状态得到最终状态。当然,Egor 不希望操作次数过多。设 为每个表格中字符的总数(两个表格相同),则你使用的操作次数不能超过 。
输入
第一行包含两个整数 和 ()—— 表格的行数和列数。
接下来的 行描述初始状态的表格,格式如下:每行包含 个由 0 和 1 组成的非空字符串。在这些行的第 行中,第 个字符串是格子 中的字符串。行从 到 编号,列从 到 编号。
接下来的 行以相同的格式描述最终状态的表格。
设初始状态中所有字符串的总长度为 。保证 。同时保证初始状态和最终状态中 0 和 1 的数量相同。
输出
第一行输出一个整数 —— 使用的操作次数。你需要找到一个满足 的解。
接下来的 行中,每行输出 个整数 。在第 行中,输出第 次操作的描述。这些整数应满足:,,,并且 或 。格子 中的字符串必须非空。这一系列操作应将表格从初始状态变换为最终状态。
可以证明解一定存在。如果有多个解,输出任意一个即可。
示例
示例输入 1
2 2
00 10
01 11
10 01
10 01
示例输出 1
4
2 1 1 1
1 1 1 2
1 2 2 2
2 2 2 1
示例输入 2
2 3
0 0 0
011 1 0
0 0 1
011 0 0
示例输出 2
4
2 2 1 2
1 2 2 2
1 2 1 3
1 3 1 2
注释
考虑第一个示例。
- 当前表格状态:
第一次操作。格子 中的字符串为00 10 01 1101。对格子 和 执行操作,将01末尾的1移动到00的开头,得到字符串100。 - 当前表格状态:
第二次操作。格子 中的字符串为100 10 0 11100。对格子 和 执行操作,将100末尾的0移动到10的开头,得到字符串010。 - 当前表格状态:
第三次操作。格子 中的字符串为10 010 0 11010。对格子 和 执行操作,将010末尾的0移动到11的开头,得到字符串011。 - 当前表格状态:
第四次操作。格子 中的字符串为10 01 0 011011。对格子 和 执行操作,将011末尾的1移动到0的开头,得到字符串10。 - 当前表格状态:
显然,我们已到达最终状态。10 01 10 01