#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10, ma = 1e5, mod = 1e9 + 7;
int t, n, k, x, y, cnt, c[N], head[N], to[N << 1], ne[N << 1];
long long ans, sum, g[N], po[N], di[N];
bool mark[N << 1];
inline long long h(long long x){
return x % mod;
}
inline long long mypow(long long x, long long y){
long long ans = 1;
while(y){
if(y & 1) ans = h(ans * x);
x = h(x * x), y >>= 1;
}
return ans;
}
inline void add(int x, int y){
to[++cnt] = y, ne[cnt] = head[x], head[x] = cnt, mark[cnt] = false;
return ;
}
inline void dfs(int x, int y){
long long step = h(di[c[x] - 1] * po[max(0, c[x] - 2)]);
for(int i = head[x];i != -1;i = ne[i]){
int v = to[i];
if(v == y) continue;
dfs(v, x), ans = h(ans - (mark[i] ? g[x] + g[v] : g[v] * g[x]));
g[x] = h(g[x] + (mark[i] ? step : g[v] * step));
}
sum = h(sum * po[c[x] - 1]);
return ;
}
int main(){
freopen("traverse.in","r",stdin);
freopen("traverse.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin>>x>>t, po[0] = 1;
for(int i = 1;i <= ma;i = -~i) po[i] = h(po[i - 1] * i);
di[ma] = mypow(po[ma], mod - 2);
for(int i = ma - 1;i >= 0;i = ~-i) di[i] = h(di[i + 1] * (i + 1));
while(t --){
cin>>n>>k, sum = 1, ans = k, cnt = 0;
for(int i = 1;i <= n;i = -~i) c[i] = g[i] = 0, head[i] = -1;
for(int i = 1;i < n;i = -~i) cin>>x>>y, add(x, y), add(y, x), c[x] ++, c[y] ++;
for(int i = 1;i <= k;i = -~i) cin>>x, mark[2 * x - 1] = mark[2 * x] =true;
dfs(1, 0), cout<<h((ans < 0 ? ans + mod : ans) * sum)<<'\n';
}
return 0;
}