#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; vector G[105]; int f[105],n; typedef struct Edge{ int x, y; }Edge; Edge edge[105]; int root(int x){ if (f[x] == -1) return x; return f[x] = root(f[x]); } int merge(int x, int y){ x = root(x); y = root(y); if (x == y) return 0; f[x] = y; return 1; } int main(){ int t, a, b; cin >> t; while (t--){ cin >> n; memset(f, -1, sizeof(f)); for (int i = 0; i < n + 1; i++){ scanf("%d%d", &edge[i].x, &edge[i].y); } int ret = 0; for (int i = 0; i < n + 1; i++){ int tmp = 0; memset(f, -1, sizeof(f)); for (int j = 0; j < n + 1; j++) if (i != j) tmp += merge(edge[j].x, edge[j].y); if (tmp == n - 1) ret++; } for (int i = 0; i < n + 1; i++){ for (int j = i + 1; j < n + 1; j++){ memset(f, -1, sizeof(f)); int tmp = 0; for (int k = 0; k < n + 1; k++)if (i != k&&k != j) tmp += merge(edge[k].x, edge[k].y); if (tmp == n - 1) ret++; } } cout << ret << endl; } return 0; }