#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1e4;
const long long mod=1e9+7;
struct rec{
	int e,nex,s;
}z[N*2];
int en=1,fi[N];
int a[N];
void add(int s,int e,int i){
	z[++en].e=e;
	z[en].s=s;
	z[en].nex=fi[s];
	fi[s]=en;
	a[i]=en;
}
int t,n,k;
long long ans;
bool vis[N*2];
void dfs(int u,int cnt){
	if (cnt==n-1){
		++ans;
		ans%=mod;
		return ;
	}
	for (int i=fi[z[u].s];i!=0;i=z[i].nex){
		if (vis[i]==true) continue;
		vis[i]=true;
		vis[i^1]=true;
		dfs(i,cnt+1);
		vis[i]=false;
		vis[i^1]=false;
	}
	for (int i=fi[z[u].e];i!=0;i=z[i].nex){
		if (vis[i]==true) continue;
		vis[i]=true;
		vis[i^1]=true;
		dfs(i,cnt+1);
		vis[i]=false;
		vis[i^1]=false;
	}
}

void init(){
	scanf("%d%d",&n,&k);
	for (int i=1;i<=n;++i){
		fi[i]=0; 
	} 
	for (int i=2;i<=en;++i){
		vis[i]=false;
		a[i]=0;
	}
	en=1;
	ans=0;
	for (int i=1;i<n;++i){
		int s,e;
		scanf("%d%d",&s,&e);
		add(s,e,i);
		add(e,s,i);
	}
	for (int i=1;i<=k;++i){
		int p;
		scanf("%d",&p);
		vis[a[p]]=true;
		vis[a[p]^1]=true;
		if (k!=1){
			printf("1\n");
			continue;
		}
		ans=0;
		dfs(a[p],1);
		vis[a[p]]=false;
		vis[a[p]^1]=false;
		printf("%lld\n",ans);
	}
}
int q,c;
int main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	scanf("%d%d",&c,&q);
	while (q--){
		if (c==18) printf("1\n");
		else init();
	}
	return 0;
}
