Ivan 在参加考试时,在以下题目上遇到了困难: “输入一个整数 $N$。求数字 $0.135791113151719 \dots$ 的第 $N$ 位数字……”
为了在下一次补考中成功通过,从而避免留级,他决定通过扮演类似以下任务中的主角来进行练习:
给定一个拥有 $N$ 个节点和 $M$ 个边的无向图。每条边都有一个权值,该权值是一个小于 $10^9$ 的整数。
如果一个简单环(不重复经过节点的环)中所有边的权值按位异或(XOR)之和等于零,则称该简单环是好的。
Ivan 可以对图进行若干次操作。一次操作由以下步骤组成:
- Ivan 选择一个整数 $x$;
- 然后他选择给定图的边集的一个非空子集;
- 接着他对所有选中的边应用按位异或 $x$ 的操作(如果某条被选中的边的权值为 $p$,在上述操作后,该边的新权值将变为 $p \oplus x$)。
Ivan 希望得到一个所有简单环都是好的图。同时,他希望用尽可能少的操作次数来实现这一目标。求出使每个简单环都变好所需的最小操作次数,并输出具体的操作方案。可以证明,总能通过某种操作序列满足 Ivan 的要求。
输入格式
第一行包含两个正整数 $N$ 和 $M$($1 \le N, M \le 100\,000$),分别表示节点数和边数。
接下来的 $M$ 行中,第 $i$ 行描述第 $i$ 条边:包含三个整数 $a_i, b_i, p_i$($1 \le a_i, b_i \le N, a_i \neq b_i, 0 \le p_i \le 10^9$),表示第 $i$ 条边连接的两个节点以及该边的权值。
图是连通的,且没有重边。
输出格式
第一行输出一个整数 $K$,表示最少的操作次数。
在接下来的 $K$ 行中,每行输出一组由空格隔开的数,格式如下:
- 行中的第一个数是该次操作中选择的整数 $x$;
- 第二个数是 $B$,表示该次操作中选择的边数;
- 接下来是 $B$ 个整数 $E_i$($1 \le E_i \le M$),表示被选中边的编号(按输入顺序从 $1$ 到 $M$ 编号),这些编号必须按升序排列。
输出中的所有数字都应小于或等于 $2 \cdot 10^9$。
数据范围
- 在占总分 20% 的测试样例中,最少所需的操作次数等于 1。
- 在另外占总分 40% 的测试样例中,输入中的所有数字都小于或等于 $10^6$。
样例
输入 1
4 4 1 2 10 2 3 9 3 4 8 4 1 7
输出 1
1 12 3 1 2 3
输入 2
2 1 1 2 3
输出 2
0
输入 3
6 8 1 2 6 2 3 1 3 5 6 3 1 5 4 5 0 3 6 0 4 2 8 4 1 1
输出 3
2 2 2 4 6 15 1 7
说明
在第一个测试样例中,初始的图如左下方图像所示,最终的图(对前三条边与 12 进行异或操作后)如右下方图像所示。图中唯一的环是好的,因为其所有边的异或和为 0。
在第二个测试样例中,图中没有环,因此“每个简单环都是好的”这一条件平凡地满足。这就是为什么所需的操作次数为 0 的原因。