#include <bits/stdc++.h>
using namespace std;
void debug() { cerr << "\n"; }
template <typename H, typename... T>
void debug(H h, T... t) {
  cerr << h;
  if (sizeof...(t)) cerr << ", ";
  debug(t...);
}
const int N = 1e5 + 5, INF = 1e9 + 5, mod = 1e9 + 7;
unordered_set<int> E[N];
int d[N];
bool check(int v) {
  vector<int> V;
  for (auto &i : E[v]) V.push_back(i);
  for (int i = 0; i < (int)(V).size(); i++) {
    for (int j = i + 1; j < (int)(V).size(); j++) {
      if (E[V[i]].find(V[j]) == E[V[i]].end()) return 0;
    }
  }
  return 1;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int t;
  cin >> t;
  while (t--) {
    int n, m, k;
    cin >> n >> m >> k;
    for (int i = 0; i < m; i++) {
      int u, v;
      cin >> u >> v;
      d[u]++;
      d[v]++;
      E[v].insert(u);
      E[u].insert(v);
    }
    vector<int> zle;
    for (int i = 1; i <= n; i++) {
      if (d[i] < k) zle.push_back(i);
    }
    for (int i = 0; i < zle.size(); i++) {
      int v = zle[i];
      for (int u : E[v]) {
        if (d[u]-- == k) zle.push_back(u);
      }
    }
    if (zle.size() < n) {
      cout << "1 " << n - zle.size() << "\n";
      for (int i = 1; i <= n; i++) {
        if (d[i] >= k) cout << i << " ";
      }
      for (int i = 1; i <= n; i++) {
        d[i] = 0;
        E[i].clear();
      }
      cout << "\n";
      continue;
    }
    zle.clear();
    vector<int> V;
    for (int i = 1; i <= n; i++) {
      if (E[i].size() < k - 1) {
        zle.push_back(i);
      }
      if (E[i].size() == k - 1) V.push_back(i);
    }
    while (zle.size() || (int)(V).size()) {
      while (zle.size()) {
        int v = zle.back();
        zle.pop_back();
        for (int u : E[v]) {
          E[u].erase(E[u].find(v));
          if (E[u].size() == k - 1) {
            V.push_back(u);
          }
          if (E[u].size() == k - 2) {
            zle.push_back(u);
          }
        }
        E[v].clear();
      }
      if (V.size()) {
        int v = V.back();
        V.pop_back();
        if (E[v].size() < k - 1) continue;
        if (check(v)) {
          cout << 2 << "\n";
          cout << v << " ";
          for (int i : E[v]) cout << i << " ";
          cout << "\n";
          V.push_back(0);
          break;
        } else
          zle.push_back(v);
      }
    }
    if (!(int)(V).size()) cout << "-1\n";
    for (int i = 1; i <= n; i++) {
      d[i] = 0;
      E[i].clear();
    }
  }
}
