#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1000009;
int tot,to[N],nx[N],st[N],ans,bz[N];
int n,u[N],v[N],k;
void add(int u,int v)
{
	tot++;
	to[tot]=v;
	nx[tot]=st[u];
	st[u]=tot;
}
void dg(int x,int sum)
{
	if(sum==n-1) ans++;
	for(int i=st[x];i;i=nx[i])
	{
		int v=to[i];
		if(bz[v]==0)
		{
			bz[v]=1;
			dg(v,sum+1);
			bz[v]=0;
		}
	}
}
int main()
{
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	int c,T;
	scanf("%d%d",&c,&T);
	while(T--)
	{
		ans=0;
		scanf("%d%d",&n,&k);
		for(int i=1;i<=n;i++)
			bz[i]=0;
		for(int i=1;i<n;i++)
			scanf("%d%d",&u[i],&v[i]);
		for(int i=1;i<n;i++)
			for(int j=i+1;j<n;j++)
				if(u[i]==u[j]||u[i]==v[j]||v[i]==u[j]||v[i]==v[j])
					add(i,j),add(j,i);
		for(int i=1;i<=k;i++)
		{
			int x;
			scanf("%d",&x);
			bz[x]=1;
			dg(x,1);
			bz[x]=0;
		}
		printf("%d\n",ans);
	}
	return 0;
}

