令 $G = (V, E)$ 为一个具有 $N$ 个顶点和 $M$ 条边的简单无向图,其中 $V = \{1, \dots, N\}$。如果三元组 $\langle u, v, w \rangle$ 满足 $\{(u, v), (v, w)\} \subseteq E$ 且 $u \neq w$,则称其为 $G$ 中的一个“回旋镖”(boomerang);换句话说,一个回旋镖由两条共享一个公共顶点的边组成。
给定图 $G$,你的任务是找出尽可能多的不相交回旋镖。一个集合 $S$ 包含不相交的回旋镖,当且仅当 $G$ 中的每条边在 $S$ 中最多出现一次(即属于某一个回旋镖)。你可以输出任意一组有效的、互不相交的回旋镖,但回旋镖的总数必须达到最大。
例如,考虑一个 $N = 5$ 个顶点、$M = 7$ 条边的图 $G = (V, E)$,其中 $E = \{(1, 2), (1, 4), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5)\}$。
该示例图中不相交回旋镖的最大数量为 $3$。包含这 $3$ 个不相交回旋镖的一个示例集合是 $\{\langle 4, 1, 2 \rangle, \langle 4, 3, 2 \rangle, \langle 2, 5, 3 \rangle\}$;在该示例中,没有任何集合能包含超过 $3$ 个不相交的回旋镖。
输入格式
输入的第一行包含两个整数:$N$ 和 $M$ ($1 \le N, M \le 100000$),分别表示图 $G$ 的顶点数和边数。接下来的 $M$ 行,每行包含两个整数:$u_i$ 和 $v_i$ ($1 \le u_i < v_i \le N$),表示 $G$ 中的边 $(u_i, v_i)$。你可以确信给定的列表中每条边最多出现一次。
输出格式
第一行输出一个整数 $K$,表示 $G$ 中不相交回旋镖的最大数量。接下来的 $K$ 行,每行包含三个整数:$u, v, w$(每个整数之间用单个空格分隔),表示一个回旋镖 $\langle u, v, w \rangle$。输出中的所有回旋镖必须互不相交。如果存在多个有效的解决方案,你可以输出其中任意一个。
样例
样例输入 1
5 7 1 2 1 4 2 3 2 4 2 5 3 4 3 5
样例输出 1
3 4 1 2 4 3 2 2 5 3
样例输入 2
4 6 1 2 1 3 1 4 2 3 2 4 3 4
样例输出 2
3 1 2 3 1 3 4 1 4 2
样例输入 3
3 3 1 2 1 3 2 3
样例输出 3
1 2 1 3