func_code_string: #include <bits/stdc++.h>   using namespace std;   int main() {     int t;     cin >> t;     while (t--) {       int n, m, k;       cin >> n >> m >> k;       vector<vector<int> > g(n);       vector<int> deg(n);       for (int i = 0; i < m; i++) {         int x, y;         cin >> x >> y;         --x;         --y;         g[x].push_back(y);         g[y].push_back(x);         deg[x]++;         deg[y]++;       }       for (int i = 0; i < n; i++) sort(g[i].begin(), g[i].end());       vector<bool> used(n), vis(n);       vector<int> q(n);       int top = 0;       vector<int> vert(k);       bool f = 0;       for (int i = 0; i < n; i++) {         used[i] = vis[i] = 0;         if (deg[i] < k) {           vis[i] = 1;           q[top++] = i;         }       }       for (int i = 0; i < top; i++) {         int u = q[i];         vis[u] = 0;         used[u] = 1;         if (deg[u] < k - 1) {           for (auto j : g[u]) {             if (!used[j]) --m;             deg[j]--;             if (!vis[j] and !used[j] and deg[j] < k) {               vis[j] = 1;               q[top++] = j;             }           }           continue;         } else if (deg[u] == k - 1) {           if ((long long)k * (k - 1) <= 2 * (long long)m) {             int r = 0;             for (auto p : g[u]) {               if (!used[p]) vert[r++] = p;             }             bool ff = 1;             for (int x = 0; x < r; x++) {               if (!ff) break;               for (int y = x + 1; y < r; y++) {                 int pp =                     lower_bound(g[vert[x]].begin(), g[vert[x]].end(), vert[y]) -                     g[vert[x]].begin();                 if (pp == g[vert[x]].size() or g[vert[x]][pp] != vert[y]) {                   ff = 0;                   break;                 }               }             }             if (ff) {               f = 1;               cout <<  2 n  << u + 1 <<    ;               for (int c = 0; c < r; c++) cout << vert[c] + 1 <<    ;               cout <<   n ;               break;             }           }         }         for (auto j : g[u]) {           deg[j]--;           if (!used[j]) --m;           if (!vis[j] and !used[j] and deg[j] < k) {             vis[j] = 1;             q[top++] = j;           }         }       }       if (f) continue;       vector<int> ff;       for (int i = 0; i < n; i++)         if (!used[i]) ff.push_back(i);       if (!ff.empty()) {         cout <<  1   << ff.size() <<   n ;         for (auto c : ff) {           c++;           cout << c <<    ;         }         cout <<   n ;       } else         cout <<  -1 n ;     }     return 0;   }   