Tom 从他的老板那里接到了许多任务,手动处理这些任务非常枯燥。幸运的是,Tom 拥有一台特殊的机器——高级计算机器(ACM)来帮助他。
ACM 的工作方式非常特殊。机器可以在短时间内完成一个任务,在完成一个任务后,它必须能够平滑地移动到下一个任务,否则机器会自动停止。你必须重新启动它才能使其继续工作。当然,机器不能随意地从一个任务移动到另一个任务。因此,每次启动前,必须预先安排好一个任务序列。特别地,单个任务也可以被视为一个序列。在序列中,机器必须能够从一个任务平滑地移动到它的后继任务(如果存在)。启动后,机器总是按照任务序列工作,并在完成最后一个任务时自动停止。如果并非所有任务都已完成,机器必须再次启动并按照一个新的序列工作。当然,已完成的任务不能再次被安排。
由于某些未知原因,题目保证对于任意两个任务 $i$ 和 $j$,机器要么能从 $i$ 平滑移动到 $j$,要么能从 $j$ 平滑移动到 $i$,或者两者皆可。由于启动过程非常缓慢,Tom 希望合理地安排任务序列,使得所有任务能够以最少的启动次数完成。你的任务是帮助他实现这一目标。
输入格式
输入包含多组测试数据。对于每组测试数据,第一行包含一个整数 $n$ ($0 < n \leq 1\,000$),表示 Tom 接到的任务数量。接下来有 $n$ 行,每行包含 $n$ 个由空格分隔的整数($0$ 或 $1$)。如果第 $i$ 行的第 $j$ 个整数为 $1$,则表示机器可以从任务 $i$ 平滑移动到任务 $j$,否则表示不能。任务编号从 $1$ 到 $n$。
输入以文件结束符(EOF)终止。
输出格式
对于每组测试数据,第一行输出一个整数 $k$,表示所需的最少启动次数。随后输出 $2k$ 行,用于描述这 $k$ 个任务序列。对于每个任务序列,第一行应包含一个整数 $m$,表示该序列中的任务数量;第二行应包含 $m$ 个整数,表示序列中任务的顺序。同一行中相邻的两个整数之间仅用一个空格分隔,不允许有多余空格。可能存在多种解,任何合法的解均可。
样例
样例输入 1
3
0 1 1
1 0 1
0 0 0
样例输出 1
1
3
2 1 3