双圈覆盖
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

对于一张没有重边自环的 个点的无向图,定义一个圈是指一个可以重复经过同一个点多次的环,但是不能多次经过同一条边,例如不是一个合法的圈,而 是一个合法的圈。
定义一个无向图的双圈覆盖为:求出这个图的若干个圈,使得每条边恰好出现在两个圈中(无论方向)。
图论界有一个著名的猜想是:点双连通分量是否都有双圈覆盖。这个问题显然太难了,但是火山哥知道如果一个图有哈密尔顿回路的话,他就一定有双圈覆盖。
现在给定一张没有重边自环的 个点的无向图,保证这个图存在哈密尔顿回路(会给出)且每个点的度数至少为,现在你需要求出他的一个双圈覆盖。

输入描述:

第一行一个正整数 T 表示数据组数
对于每组数据,第一行两个正整数 n,m,表示点数和边数
接下来 行,每行两个整数 ,表示一条无向边
输入的图保证:没有重边和自环,且对于 ,该图一定有边
,且该图一定有边

输出描述:

对于每组数据输出:
第一行一个正整数 表示圈的数量
接下来 行,每行第一个整数 表示这个圈的点数,之后 个整数 ,表示一个圈,圈包含的边是 (a_1,a_l)
保证一定有解
示例1

输入

复制
1
4 6
1 2
2 3
3 4
1 4
2 4
1 3

输出

复制
3
4 1 2 3 4 
4 1 2 4 3 
4 1 4 2 3