Byteman 正在研究有向图。他特别喜欢不包含环的图,因为这类图中的许多问题都可以简单且高效地解决。现在,他正在尝试寻找一种将任意有向图表示为若干个无环图之和的方法。
对于给定的有向图,他试图找到一种将图的所有边划分为最少数目子集的方法,使得由这些边子集构成的图都不包含环。你能编写一个程序来解决 Byteman 的问题吗?
输入格式
标准输入的第一行包含两个整数 $n$ 和 $m$ ($1 \le n, m \le 100\,000$),分别表示图中顶点的数量和边的数量。顶点编号从 $1$ 到 $n$。接下来的 $m$ 行,每行包含一对整数 $a_{i}, b_{i}$ ($1 \le a_{i}, b_{i} \le n, a_{i} \neq b_{i}$),描述图中的一条边。该对整数表示一条从顶点 $a_{i}$ 指向顶点 $b_{i}$ 的有向边。你可以假设图中不包含重边。
输出格式
输出的第一行应包含一个整数 $k$,表示将图分解为无环图的最小数量。接下来的 $k$ 行,每行描述分解中的一个元素,首先输出一个整数 $l_{i}$,表示该元素中包含的边数。随后紧跟 $l_{i}$ 个递增的整数,表示属于该分解元素的边的编号。边的编号按照它们在输入中出现的顺序从 $1$ 到 $m$ 进行编号。每条边必须恰好出现在分解的一个元素中。
如果存在多种正确的解决方案,输出其中任意一种即可。
样例
输入 1
6 5 1 2 2 3 3 1 4 5 5 4
输出 1
2 2 3 5 3 1 2 4
题目描述中样例的示意图。圆圈代表顶点,线条和弧线(实线和虚线)代表图的边。圆圈旁边的数字是顶点编号,线条/弧线旁边的数字是边的编号。该图可以分解为两个无环图:第一个图的边用实线/弧线表示,第二个图的边用虚线/弧线表示。