#P1776. Task Sequences

Task Sequences

描述

汤姆从老板那里接到了很多任务,手工处理这些任务非常枯燥。幸运的是,汤姆得到了一台特殊的机器——高级计算机器(ACM)来帮助他。

ACM 的工作方式非常特殊。这台机器可以在短时间内完成一个任务,完成一个任务后,它需要顺利移动到下一个任务,否则机器会自动停止。你必须重新启动它才能让它继续工作。当然,机器不能随意从一个任务移动到另一个任务。因此,每次启动机器前,必须精心安排一个任务序列。特别地,单个任务也可以视为一个序列。在序列中,机器必须能够从一个任务顺利移动到其后续任务(如果存在的话)。启动后,机器总是按照任务序列工作,并在完成最后一个任务后自动停止。如果并非所有任务都已完成,机器必须再次启动并按照新的序列工作。当然,已完成的任务不能再次被安排。

由于某些未知原因,保证对于任意两个任务 iijj,机器可以从 ii 顺利移动到 jj,或从 jj 顺利移动到 ii,或两者均可。由于启动过程非常缓慢,汤姆希望合理安排任务序列,使得完成所有任务所需的启动次数最少。你的任务是帮助他实现这一目标。

输入

输入包含多个测试用例。对于每个测试用例,第一行仅包含一个整数 nn0<n1,0000 < n \leq 1{,}000),表示汤姆收到的任务数量。接下来 nn 行,每行包含 nn 个由空格分隔的整数 0011。如果第 ii 行的第 jj 个整数为 11,则机器可以从任务 ii 顺利移动到任务 jj,否则不能。任务编号从 11nn

输入以文件结束符终止。

输出

对于每个测试用例,输出的第一行应为一个整数 kk,即所需的最少启动次数。接下来 2k2k 行描述 kk 个任务序列。对于每个任务序列,第一行应包含一个整数 mm,表示序列中的任务数量。第二行应包含 mm 个整数,表示任务序列的顺序。同一行中连续的整数应仅用一个空格分隔,不允许有多余空格。可能有多个解决方案,任意合适的方案均可接受。

输入数据 1

3  
0 1 1  
1 0 1  
0 0 0

输出数据 1

1  
3  
2 1 3

来源

2003年亚洲广州赛区