#include<cstdio>
using namespace std;
int n,ans;
const int N=1e5+10,M=20;
int u[N],v[N],e[N];
int head[N];
bool bz[M][M],vis[M][M];
void dfs(int c,int s,int cnt)
{
	if(c==s&&cnt==n) ans++;
	for(int i=1;i<n;i++)
		if(bz[c][i])
		{
			if(!vis[c][i])
			{
				vis[c][i]=true;
				dfs(i,s,cnt+1);
				vis[c][i]=false;
			}	
		}
	return;
}
int main()
{
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	int c,T,k;
	scanf("%d%d",&c,&T);
	while(T--)
	{
		ans=0;
		scanf("%d%d",&n,&k);
		for(int i=1;i<n;i++)
			scanf("%d%d",&u[i],&v[i]);
		for(int i=1;i<=k;i++)
			scanf("%d",&e[i]);
		for(int i=1;i<n;i++)
			for(int j=1;j<n;j++)
				if(i!=j)
				{
					if(v[i]==u[j]) bz[i][j]=bz[j][i]=true;
				}
		for(int i=1;i<=k;i++)
			dfs(e[i],e[i],0);
		printf("%d\n",ans);
	}
	return 0;
}
