#include<stdio.h>
struct node{ // 结点结构体
int a; // 父节点
int b[1000]; // 子结点
int d; // 结点的度
int k; // 子结点个数
}po[1001];
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
while(n--){
int m;
scanf("%d",&m);
for(int i=0;i<m;i++){ po[i].k=0;po[i].d=0;}
for(int i=0;i<m-1;i++){
int a,b;
scanf("%d%d",&a,&b);
po[a].b[po[a].k++]=b; po[b].a=a;
po[a].d++; po[b].d++;
}
int sum=0;
for(int i=0;i<m;i++){
if(po[i].d>=po[po[i].a].d){
int flag=0;
for(int j=0;j<po[i].k;j++){
if(po[i].d<po[po[i].b[j]].d){
flag=1; break;
}
}
if(flag==0) sum++;
}
}
printf("%d\n",sum);
}
}
return 0;
}
struct node{ // 结点结构体
int a; // 父节点
int b[1000]; // 子结点
int d; // 结点的度
int k; // 子结点个数
}po[1001];
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
while(n--){
int m;
scanf("%d",&m);
for(int i=0;i<m;i++){ po[i].k=0;po[i].d=0;}
for(int i=0;i<m-1;i++){
int a,b;
scanf("%d%d",&a,&b);
po[a].b[po[a].k++]=b; po[b].a=a;
po[a].d++; po[b].d++;
}
int sum=0;
for(int i=0;i<m;i++){
if(po[i].d>=po[po[i].a].d){
int flag=0;
for(int j=0;j<po[i].k;j++){
if(po[i].d<po[po[i].b[j]].d){
flag=1; break;
}
}
if(flag==0) sum++;
}
}
printf("%d\n",sum);
}
}
return 0;
}