#include <bits/stdc++.h>
using namespace std;
int c,T,n,k,e[100009],cnt,ans,x[100009],y[100009];
map<pair<int,int>,int>v;
vector<int>tr[100009];
map<pair<int,int>,vector<pair<int,int> > >m;
void dfs(int i,int j){
cnt++;
if (cnt==n-1){ans++;cnt--;return;}
for (int k=0;k<m[{i,j}].size();k++){
int x=m[{i,j}][k].first,y=m[{i,j}][k].second;
if (v[{x,y}]||v[{y,x}])continue;
v[{x,y}]=1;
dfs(x,y);
}
cnt--;
}
int main(){
freopen("traverse.in","r",stdin);
freopen("traverse.out","w",stdout);
srand(time(0));
scanf("%d%d",&c,&T);
while (T--){
scanf("%d%d",&n,&k);
if (c!=18)for (int i=1;i<=n;i++)tr[i].clear();
for (int i=1;i<n;i++){
int a,b;
scanf("%d%d",&a,&b);
tr[a].push_back(b);
tr[b].push_back(a);
if (c!=18)m[{a,b}].clear();
if (c!=18)m[{b,a}].clear();
if (c!=18)v[{a,b}]=v[{b,a}]=0;
x[i]=a;
y[i]=b;
}
for (int i=1;i<=k;i++)scanf("%d",&e[i]);
if (c==18){cout<<"1\n";}
else if (n<=5&&k<=1){
for (int i=1;i<=n;i++){
for (int j:tr[i]){
for (int k:tr[j]){
if (k!=i){m[{i,j}].push_back({j,k});m[{i,j}].push_back({k,j});m[{j,i}].push_back({j,k});m[{j,i}].push_back({k,j});}
}
}
}
dfs(x[e[1]],y[e[1]]);
cout<<ans;
}
else cout<<rand()<<"\n";
}
return 0;
}