//
// main.cpp
// IntensiveCamp 1 2026
//
// Created by Ali AlSalman on 27/04/2026.
//
#include <bits/stdc++.h>
#define INTERACTIVE
#define TESTCASES
//#define SPOJ_BULLSCHEI__SZ__E__KIJETESANPAKALU__
#ifndef INTERACTIVE
#define endl '\n'
#endif
template<typename T>
using vec = std::vector<T>;
using namespace std;
struct DSU {
int size;
vec<int> par, siz;
vec<vec<int>> q;
DSU() = default;
DSU(int n) : size(n), par(n, -1), siz(n, 1), q(n, vec<int>(n)) {}
int find(int a) {
if (par[a] == -1) return a;
return par[a] = find(par[a]);
}
bool conn(int a, int b) {
a = find(a); b = find(b);
q[a][b]++;
q[b][a]++;
if (q[a][b] == siz[a] * siz[b]) {
merge(a, b);
return true;
}
return false;
}
void merge(int a, int b) {
a = find(a); b = find(b);
if (a == b) return;
if (siz[a] < siz[b]) swap(a, b);
par[b] = a;
siz[a] += siz[b];
for (int i = 0; i < size; i++) if (i != a && i != b) {
q[a][i] += q[b][i];
q[i][a] += q[i][b];
}
}
};
DSU d;
void initialize(int n) {
d = DSU(n);
}
int hasEdge(int u, int v) {
return d.conn(u, v);
}
void solve() {
}
//int main() {
//#ifndef INTERACTIVE
// ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
//#endif
//
// int t = 1;
//#ifdef TESTCASES
// cin>>t;
//#endif
//
// for (int i = t; i--;) {
//#if defined(TESTCASES) && defined(SPOJ_BULLSCHEI__SZ__E__KIJETESANPAKALU__)
// cout<<"Case "<<t-i<<":\n";
//#elif defined(SPOJ_BULLSCHEI__SZ__E__KIJETESANPAKALU__)
//#warning SPOJ_BULLSCHEIßE__KIJETESANPAKALU__ without TESTCASES doesn't ducking make sense!
//#endif
// solve();
// nexttestcase:
// }
// return 0;
//}