#include "worldmap.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define all(x) x.begin(),x.end()
#define rall(x) x.begin(),x.end()
#ifdef MARCO
#define infof(str,...) do{fprintf(stderr, str"\n", ##__VA_ARGS__);}while(0);
#define infor(str,...) do{fprintf(stderr, str, ##__VA_ARGS__);}while(0);
#else
#define infof(str,...)
#define infor(str,...)
#endif
std::vector<std::vector<int>> create_map(int N, int M, std::vector<int> A, std::vector<int> B) {
vector<int> rig(N+1);
vector<int> tb;
vector<vector<int>> G(N+1);
set<array<int, 2>> st;
for(int i=0; i<M; i++) {
G[A[i]].push_back(B[i]);
G[B[i]].push_back(A[i]);
}
vector<bool> vis(N+1);
int tot = 0;
auto dfs = [&](int v, int f, auto &&dfs) -> void {
if(vis[v]) return;
vis[v] = 1;
tot++;
rig[v] = tb.size()+1;
tb.push_back(v);
tb.push_back(v);
tb.push_back(v);
for(auto &u: G[v]) {
if(u == f) continue;
if(vis[u]) {
st.insert({min(u, v), max(u, v)});
continue;
}
dfs(u, v, dfs);
if(tot < N) tb.push_back(v);
}
};
dfs(1, -1, dfs);
vector<vector<int>> ans(tb.size(), tb);
vector<int> c(N+1);
for(auto &[x, y]: st) {
ans[c[x]][rig[x]] = y;
c[x]+=2;
}
return ans;
}
#ifdef MARCO
int main() {
int T;
assert(1 == scanf("%d", &T));
std::vector<int> Nt(T), Mt(T);
std::vector<std::pair<std::vector<int>, std::vector<int>>> AB;
for (int t = 0; t < T; ++t) {
assert(2 == scanf("%d %d", &Nt[t], &Mt[t]));
int M = Mt[t];
std::vector<int> A(M), B(M);
for (int i = 0; i < Mt[t]; i++) {
assert(2 == scanf("%d %d", &A[i], &B[i]));
}
AB.push_back(make_pair(A, B));
}
fclose(stdin);
std::vector<std::vector<std::vector<int>>> Ct;
for (int t = 0; t < T; t++) {
int N = Nt[t], M = Mt[t];
std::vector<int> A = AB[t].first, B = AB[t].second;
auto C = create_map(N, M, A, B);
Ct.push_back(C);
}
for (int t = 0; t < T; t++) {
auto& C = Ct[t];
int P = (int)C.size();
std::vector<int> Q(P);
for (int i = 0; i < P; ++i)
Q[i] = (int)C[i].size();
printf("%d\n", P);
for (int i = 0; i < P; ++i)
printf("%d%c", Q[i], " \n"[i + 1 == P]);
printf("\n");
for (int i = 0; i < P; i++) {
for (int j = 0; j < Q[i]; j++) {
printf("%d%c", C[i][j], " \n"[j + 1 == Q[i]]);
}
}
if (t < T - 1)
printf("\n");
}
fclose(stdout);
return 0;
}
#endif