#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll _=1e5+5;
ll c,C,T,n,m,nxt[_],h[_],to[_],v[_],p[_];
vector<ll>e[_];
bitset<100000000>b;
inline void add(ll x,ll y,ll z){
	nxt[++c]=h[x];h[x]=c;to[c]=y;v[c]=z;
}
void dfs(ll x,ll fa,ll nm,ll st){
	if(nm==n){
		b[st]=1;
		return;
	}
	v[x]=1;st|=1<<(x-1);
	for(ll i=1;i<=e[x].size();i++)p[i]=e[x][i];
	do{
		for(ll i=1;i<=e[x].size();i++)
			if(e[x][p[i]-1]!=x)dfs(e[x][p[i]-1],x,nm+1,st);
	}while(next_permutation(p+1,p+n+1));
	v[x]=0;
}
int main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>C>>T;
	while(T--){
		cin>>n>>m;c=1;
		for(ll i=1,x,y;i<n;i++){
			cin>>x>>y;
			add(x,y,i);
			add(y,x,i);
		}
		for(ll i=1;i<=n;i++)e[i].clear();
		memset(h,0,sizeof(h));
		b.reset();
		for(ll i=1;i<=n;i++)
			for(ll j=h[i];j;j=nxt[j])
				for(ll k=h[i];k;k=nxt[k])
					if(j!=k){
						e[j/2].push_back(k/2);
						e[k/2].push_back(j/2);
					}
		for(ll i=1,x;i<=m;i++){
			cin>>x;
			dfs(x,0,0,1<<(x-1));
		}
		cout<<b.count()<<'\n';
	}
	return 0;
}/*
1 1
4 1
1 2
2 3
2 4
1

*/
