func_code_string: #include <bits/stdc++.h>   using namespace ::std;   const long double PI = acos(-1);   const long long MOD = 1000000000 + 7;   long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }   long long add(long long a, long long b, long long m = MOD) {     if (a >= m) a %= m;     if (b >= m) b %= m;     if (a < 0) a += m;     if (b < 0) b += m;     long long res = a + b;     if (res >= m or res <= -m) res %= m;     if (res < 0) res += m;     return res;   }   long long mul(long long a, long long b, long long m = MOD) {     if (a >= m) a %= m;     if (b >= m) b %= m;     if (a < 0) a += m;     if (b < 0) b += m;     long long res = a * b;     if (res >= m or res <= -m) res %= m;     if (res < 0) res += m;     return res;   }   long long pow_mod(long long a, long long b, long long m = MOD) {     long long res = 1LL;     a = a % m;     while (b) {       if (b & 1) res = mul(res, a, m);       b >>= 1;       a = mul(a, a, m);     }     return res;   }   long long fastexp(long long a, long long b) {     long long res = 1LL;     while (b) {       if (b & 1) res = res * a;       b >>= 1;       a *= a;     }     return res;   }   int gcdExtendido(int a, int b, int *x, int *y) {     if (a == 0) {       *x = 0;       *y = 1;       return b;     }     int x1, y1;     int gcd = gcdExtendido(b % a, a, &x1, &y1);     *x = y1 - (b / a) * x1;     *y = x1;     return gcd;   }   int modInverso(int a, int m) {     int x, y;     int g = gcdExtendido(a, m, &x, &y);     if (g != 1)       return -1;     else       return (x % m + m) % m;   }   const int M = 300000 + 5;   int N, n, m;   vector<int> G[M];   map<pair<int, int>, int> E;   void clearAll() {     for (int i = 1; i <= n; i++) {       G[i].clear();     }   }   int main() {     int t;     scanf( %d , &(t));     int a, b;     while (t--) {       scanf( %d %d , &(N), &(m));       n = N + N + N;       bool forest = true;       E.clear();       vector<bool> used(n + 1, false);       vector<int> matching;       for (int i = 1; i <= m; i++) {         scanf( %d %d , &(a), &(b));         if (a > b) swap(a, b);         G[a].emplace_back(b);         G[b].emplace_back(a);         E[make_pair(a, b)] = i;       }       for (int u = 1; u <= n; u++) {         if (used[u]) continue;         for (int i = 0; i < G[u].size(); i++) {           int v = G[u][i];           if (!used[v]) {             matching.emplace_back(E[make_pair(min(u, v), max(u, v))]);             used[u] = used[v] = true;             break;           }         }       }       if (matching.size() >= N) {         puts( Matching );         for (int i = 0; i < N; i++) {           printf( %d%c , matching[i], (i + 1 == N ?   n  :    ));         }       } else {         puts( IndSet );         int cnt = N;         for (int i = 1; i <= n; i++) {           if (cnt == 0) break;           if (!used[i]) {             cnt -= 1;             printf( %d%c , i, (cnt ?     :   n ));           }         }       }       if (t) clearAll();     }     return 0;   }   