#include<bits/stdc++.h>
using namespace std;
#define N 2020
int q[N][N];
int v[N];
int cnt;
int to[N],ne[N],head[N];
int cnt1;
int to1[N],ne1[N],head1[N];
int n,k;
int l[N];
long long s;
struct abc
{
	int f,t;
}a[N];
void Q()
{
	for(int i=1;i<=2000;i++)
	  to[i]=ne[i]=head[i]=to1[i]=ne1[i]=head1[i]=0;
	cnt=cnt1=0;
} 
void add(int u,int v)
{
	cnt++;
	to[cnt]=v;
	ne[cnt]=head[u];
	head[u]=cnt;
}
void add1(int u,int v)
{
	cnt1++;
	to1[cnt1]=v;
	ne1[cnt1]=head1[u];
	head1[u]=cnt1;
}
void bianli(int l,int r,int k)
{
	for(int i=head[l];i!=0;i=ne[i])
	  {
	  	int t=to[i];
	  	add1(k,q[t][l]);
	  	add1(q[t][l],l);
	  }
	for(int i=head[r];i!=0;i=ne[i])
	  {
	  	int t=to[i];
	  	add1(l,q[t][r]);
	  	add1(q[t][r],l);
	  }
}
void bian(int x,int k)
{
	if(k>=n)
	  {
	  	s++;
	  	return ;
	  }
	int f=0;
	for(int i=head1[x];i!=0;i=ne1[i])
	  {
	  	int t=to1[i];
	  	if(v[t]==0)
	  	  {
	  	  	l[t]=x;
	  	  	f=1;
	  	  	v[t]=1;
	  	  	bian(t,k+1);
	  	  	v[t]=0;
			}
	  }
	if(f==0)
	  bian(l[x],k);
}
int main()
{
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	int c,t;
	cin>>c>>t;
	while(t--)
	  {
	  	Q();
	  	int n,k;
	  	cin>>n>>k;
	  	for(int i=1;i<n;i++)
	  	  {
	  	  	cin>>a[i].f>>a[i].t;
	  	  	add(a[i].f,a[i].t);
	  	  	add(a[i].t,a[i].f);
	  	  	q[a[i].f][a[i].t]=i;
	  	  	q[a[i].t][a[i].f]=i;
			}
		for(int i=1;i<n;i++)
		  bianli(a[i].f,a[i].t,i);
		int qqq;
		for(int i=1;i<=k;i++)
		  cin>>qqq;
		s=1;
		v[qqq]=1;
		bian(qqq,1);
		cout<<s<<endl;
	  }
}
