#include using namespace std; vector> create_map(int N, int M, vector A, vector B) { // Special case: single country if (N == 1) { return vector>(1, vector(1, 1)); } // Build adjacency list vector>> adj(N + 1); for (int i = 0; i < M; ++i) { int u = A[i]; int v = B[i]; adj[u].push_back({v, i}); adj[v].push_back({u, i}); } // Find a root with degree > 0 (graph must be connected if a valid map exists) int root = 1; for (int i = 1; i <= N; ++i) { if (!adj[i].empty()) { root = i; break; } } vector seq; seq.reserve(2 * M + 1); vector used(M, 0); function dfs = [&](int u) { for (auto &pr : adj[u]) { int v = pr.first; int id = pr.second; if (!used[id]) { used[id] = 1; seq.push_back(v); dfs(v); seq.push_back(u); } } }; seq.push_back(root); dfs(root); int K = (int)seq.size(); if (K > 240) K = 240; // Safety, though with constraints K should always <= 229 vector> C(K, vector(K)); for (int i = 0; i < K; ++i) { for (int j = 0; j < K; ++j) { C[i][j] = seq[j]; } } return C; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T; if (!(cin >> T)) return 0; while (T--) { int N, M; cin >> N >> M; vector A(M), B(M); for (int i = 0; i < M; ++i) { cin >> A[i] >> B[i]; } vector> C = create_map(N, M, A, B); int P = (int)C.size(); cout << P << "\n"; for (int i = 0; i < P; ++i) { cout << C[i].size() << (i + 1 == P ? '\n' : ' '); } cout << "\n"; for (int i = 0; i < P; ++i) { for (int j = 0; j < (int)C[i].size(); ++j) { cout << C[i][j] << (j + 1 == (int)C[i].size() ? '\n' : ' '); } } } return 0; }