#include<iostream>
#include<algorithm>
using namespace std;
int M,N,size,node[200][200],input,remain,num;
int post(int index){
if(node[index][0]==0)
return 1;
int* need = new int[node[index][0]];
for(int i=0;i<node[index][0];i++){
need[i]=post(node[index][i+1]);
}
sort(need,need+node[index][0]);
num=need[node[index][0]-1];
remain=num-1;
for(int i=node[index][0]-2;i>=0;i--){
if(need[i]>remain){
num++;
}else{
remain--;
}
}
delete need;
return num;
}
int main(){
cin>>M;
while(M--){
memset(node,0,sizeof(node));
cin>>N;
for(int i=0;i<N;i++){
cin>>input;
cin>>node[input][0];
for(int j=1;j<=node[input][0];j++){
cin>>node[input][j];
}
}
cout<<post(1)<<endl;
}
return 0;
}
算子树总共需要多少石头,还可以倒序排序后取max(need[i]+i);