#include #include #include #include #include #include #include #include #include #include #include #include #define ll long long #define INF 0x3f3f3f3f using namespace std; struct Edge { int u, v, mark; }a[200]; int f[200], n; //int vis1[200][200], vis2[200][200]; int find(int x) { return f[x] == x ? x : f[x] = find(f[x]); } bool check() { for(int i = 1; i <= n; i++) { f[i] = i; } for(int i = 0; i <= n; i++) { if(a[i].mark == 1) continue; int f1 = find(a[i].u); int f2 = find(a[i].v); f[f1] = f2; } int tmp = find(1); for(int i = 2; i <= n; i++) { if(find(i) != tmp) return false; } return true; } int main() { int re; scanf("%d", &re); while(re--) { scanf("%d", &n); for(int i = 0; i <= n; i++) { scanf("%d%d", &a[i].u, &a[i].v); a[i].mark = 0; } int ans(0); for(int i = 0; i <= n; i++) { a[i].mark = 1; if(check()) { ans++; } a[i].mark = 0; } // memset(vis1, 0, sizeof(vis1)); for(int i = 0; i <= n; i++) { // if(vis1[a[i].u][a[i].v]) // continue; // vis1[a[i].u][a[i].v] = vis1[a[i].v][a[i].u] = 1; a[i].mark = 1; // memset(vis2, 0, sizeof(vis2)); for(int j = i + 1; j <= n; j++) { // if(vis2[a[j].u][a[j].v]) // continue; // vis2[a[j].u][a[j].v] = vis2[a[j].v][a[j].u] = 1; a[j].mark = 1; if(check()) ans++; a[j].mark = 0; } a[i].mark = 0; } printf("%d\n", ans); } }