#include using namespace std; vector euler_circuit(vector>& adj, int start) { vector circuit; stack stk; stk.push(start); while (!stk.empty()) { int u = stk.top(); if (adj[u].empty()) { circuit.push_back(u); stk.pop(); } else { auto it = adj[u].begin(); int v = *it; stk.push(v); adj[u].erase(it); auto it2 = adj[v].find(u); adj[v].erase(it2); } } reverse(circuit.begin(), circuit.end()); return circuit; } vector> create_map(int N, int M, vector A, vector B) { if (N == 1) { return {{1}}; } vector> adj(N + 1); for (int i = 0; i < M; i++) { int u = A[i], v = B[i]; adj[u].insert(v); adj[u].insert(v); adj[v].insert(u); adj[v].insert(u); } int start = 0; for (int i = 1; i <= N; i++) { if (!adj[i].empty()) { start = i; break; } } vector> adj_copy = adj; // Copy because euler modifies auto path = euler_circuit(adj_copy, start); int num_traversals = 2 * M; vector seq(path.begin(), path.begin() + num_traversals); int K = seq.size(); vector> C(K, vector(K, 0)); for (int r = 0; r < K; r++) { for (int c = 0; c < K; c++) { C[r][c] = seq[c]; } } return C; } int main() { int T; cin >> T; for (int t = 0; t < T; t++) { int N, M; cin >> N >> M; vector A(M), B(M); for (int i = 0; i < M; i++) { cin >> A[i] >> B[i]; } auto C = create_map(N, M, A, B); int K = C.size(); cout << K << endl; for (int i = 0; i < K; i++) { cout << K; if (i < K - 1) cout << " "; else cout << endl; } for (int r = 0; r < K; r++) { for (int c = 0; c < K; c++) { cout << C[r][c]; if (c < K - 1) cout << " "; else cout << endl; } } } return 0; }