#P1776. Task Sequences
Task Sequences
描述
汤姆从老板那里接到了很多任务,手工处理这些任务非常枯燥。幸运的是,汤姆得到了一台特殊的机器——高级计算机器(ACM)来帮助他。
ACM 的工作方式非常特殊。这台机器可以在短时间内完成一个任务,完成一个任务后,它需要顺利移动到下一个任务,否则机器会自动停止。你必须重新启动它才能让它继续工作。当然,机器不能随意从一个任务移动到另一个任务。因此,每次启动机器前,必须精心安排一个任务序列。特别地,单个任务也可以视为一个序列。在序列中,机器必须能够从一个任务顺利移动到其后续任务(如果存在的话)。启动后,机器总是按照任务序列工作,并在完成最后一个任务后自动停止。如果并非所有任务都已完成,机器必须再次启动并按照新的序列工作。当然,已完成的任务不能再次被安排。
由于某些未知原因,保证对于任意两个任务 和 ,机器可以从 顺利移动到 ,或从 顺利移动到 ,或两者均可。由于启动过程非常缓慢,汤姆希望合理安排任务序列,使得完成所有任务所需的启动次数最少。你的任务是帮助他实现这一目标。
输入
输入包含多个测试用例。对于每个测试用例,第一行仅包含一个整数 (),表示汤姆收到的任务数量。接下来 行,每行包含 个由空格分隔的整数 或 。如果第 行的第 个整数为 ,则机器可以从任务 顺利移动到任务 ,否则不能。任务编号从 到 。
输入以文件结束符终止。
输出
对于每个测试用例,输出的第一行应为一个整数 ,即所需的最少启动次数。接下来 行描述 个任务序列。对于每个任务序列,第一行应包含一个整数 ,表示序列中的任务数量。第二行应包含 个整数,表示任务序列的顺序。同一行中连续的整数应仅用一个空格分隔,不允许有多余空格。可能有多个解决方案,任意合适的方案均可接受。
输入数据 1
3
0 1 1
1 0 1
0 0 0
输出数据 1
1
3
2 1 3
来源
2003年亚洲广州赛区