#include <bits/stdc++.h>
using std::make_pair;
template <typename T>
inline T read() {
  T x = 0;
  char ch = std::getchar();
  bool f = 0;
  while (!std::isdigit(ch)) {
    f = (ch == '-');
    ch = std::getchar();
  }
  while (std::isdigit(ch)) {
    x = x * 10 + (ch - '0');
    ch = std::getchar();
  }
  return f ? -x : x;
}
template <typename T>
void print(T x) {
  if (x < 0) {
    x = -x;
    std::putchar('-');
  }
  if (x < 10) {
    std::putchar(x + 48);
    return;
  }
  print<T>(x / 10);
  std::putchar(x % 10 + 48);
  return;
}
namespace Solution {
using std::cin;
using std::cout;
using std::deque;
using std::endl;
using std::map;
using std::pair;
using std::queue;
using std::set;
using std::vector;
const int N = 304001, mod = 1e9 + 7;
int T, vis[N], ans[N];
void Fakemain() {
  T = read<int>();
  while (T--) {
    int n = read<int>(), m = read<int>();
    std::fill(vis + 1, vis + 1 + 3 * n, 0);
    int x, y, cnt = 0;
    for (int i = 1; i <= m; ++i) {
      x = read<int>();
      y = read<int>();
      if (!vis[x] && !vis[y]) vis[x] = vis[y] = 1, ans[++cnt] = i;
    }
    if (cnt >= n) {
      puts("Matching");
      for (int i = 1; i <= n; ++i) print<int>(ans[i]), putchar(' ');
      std::putchar('\n');
    } else {
      puts("IndSet");
      int num = 0;
      for (int i = 1; i <= 3 * n && num < n; ++i)
        if (!vis[i]) ++num, print<int>(i), putchar(' ');
      std::putchar('\n');
    }
  }
  return;
}
}  // namespace Solution
int main(int argc, char* argv[]) {
  Solution::Fakemain();
  return 0;
}
