#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define INF 0x3f3f3f3f #define inf -0x3f3f3f3f #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define mem0(a) memset(a,0,sizeof(a)) #define mem1(a) memset(a,-1,sizeof(a)) #define mem(a, b) memset(a, b, sizeof(a)) typedef long long ll; const int maxn=100+10; int vis[maxn]; int head[maxn]; int tot,n; int T; struct Edge{ int to,next,belong; }e[maxn]; void init(){ mem1(head); tot=0; } void addedge(int from,int to,int k){ e[tot].to=to; e[tot].next=head[from]; e[tot].belong=k; head[from]=tot++; } bool bfs(int x,int y){ queueQ; Q.push(1); vis[1]=T; while(!Q.empty()){ int u=Q.front(); Q.pop(); for(int i=head[u];i!=-1;i=e[i].next){ if(e[i].belong!=x&&e[i].belong!=y){ int v=e[i].to; if(vis[v]!=T){ vis[v]=T; Q.push(v); } } } } for(int i=1;i<=n;i++) if(vis[i]!=T) return false; return true; } int main(){ int _; scanf("%d",&_); while(_--){ scanf("%d",&n); init(); int u,v; for(int i=1;i<=n+1;i++){ scanf("%d%d",&u,&v); addedge(u,v,i); addedge(v,u,i); } int ans=0; T=0; for(int i=1;i<=n+1;i++){ ++T; if(bfs(i,0)) ans++; } for(int i=1;i<=n+1;i++) for(int j=i+1;j<=n+1;j++){ T++; if(bfs(i,j)) ans++; } printf("%d\n",ans); } return 0; }