#include<bits/stdc++.h>
#define T__ int T;scanf("%d",&T);while(T--)
#define lowbit(x) x&-x
using namespace std;
typedef long long LL;
const int maxn=1e5+5;
int kase,n,q,m,ans;
int head[maxn],tot;
struct Edge{int to,nxt;}edge[maxn<<1];
int in[maxn],out[maxn],idx,f[maxn];
int unimp[maxn];
int bit[maxn];
inline void addedge(int a,int b){
edge[++tot].to=b;
edge[tot].nxt=head[a];
head[a]=tot;
}
inline void dfs(int u,int fa){
in[u]=++idx;
for(int i=head[u];i;i=edge[i].nxt){
int v=edge[i].to;
if(v==fa) continue;
f[v]=u;
dfs(v,u);
}
out[u]=idx;
}
inline void ins(int x,int y){
for(;x<=n;x+=lowbit(x))
bit[x]+=y;
}
inline int get(int x){
int rst=0;
for(;x;x-=lowbit(x))
rst+=bit[x];
return rst;
}
inline bool check(int u){
int cnt=0;
for(int i=head[u];i;i=edge[i].nxt){
int v=edge[i].to;
if(v==f[u]) continue;
if(get(out[v])-get(in[v]-1)!=out[v]-in[v]+1){
if(++cnt==2) return false;
}
}
return true;
}
inline void init(){
tot=0;
memset(head,0,sizeof(int)*(n+1));
memset(bit,0,sizeof(int)*(n+1));
}
int main(){
#ifdef _DEBUG
freopen("data.in","r",stdin);
#endif // _DEBUG
T__{
init();
scanf("%d%d",&n,&q);
int a,b;
for(int i=1;i<n;i++){
scanf("%d%d",&a,&b);
addedge(a,b);
addedge(b,a);
}
printf("Case #%d:\n",++kase);
idx=0;dfs(1,0);
for(int i=1;i<=q;i++){
scanf("%d",&m);
for(int j=1;j<=m;j++){
scanf("%d",unimp+j);
ins(in[unimp[j]],+1);
}
ans=n;
for(int j=1;j<=m;j++){
ans-=check(unimp[j]);
}
printf("%d\n",ans);
for(int j=1;j<=m;j++){
ins(in[unimp[j]],-1);
}
}
}
return 0;
}