#include using namespace std; #define MAXN 200500 #define int long long const int P = 1e9 + 7; int head[MAXN],to[MAXN],nxt[MAXN],w[MAXN],ind; void ins(int u,int v){ nxt[++ind] = head[u]; head[u] = ind; to[ind] = v; } int f[MAXN],ans; int deg[MAXN],ti[MAXN],inv[MAXN]; bool B; void dfs(int x,int fa){ if(deg[x] == 1){ // cerr << x << '\n'; f[x] = 1; return; } int sum = 0,mul = 0; for(int h = head[x];h;h = nxt[h]){ if(to[h] == fa)continue; dfs(to[h],x); if(!B || !w[h]){ mul = (mul + sum * f[to[h]] % P) % P; sum = (sum + f[to[h]]) % P; } } f[x] = sum * inv[deg[x] - 1] % P; ans = ans + mul * inv[deg[x] - 1] % P; ans %= P; } void solve(){ int n,k,u,v,bs = 1; cin >> n >> k; inv[1] = ti[0] = ti[1] = 1; for(int i = 2;i <= n;i ++){ inv[i] = (P / i) * (P - 1) % P * inv[P % i] % P; ti[i] = ti[i - 1] * i % P; } for(int i = 1;i < n;i ++){ cin >> u >> v; deg[u] ++; deg[v] ++; ins(u,v); ins(v,u); } for(int i = 1;i <= n;i ++)bs = bs * ti[deg[i] - 1] % P; for(int i = 1;i <= k;i ++){ cin >> u; w[2 * u] = w[2 * u - 1] = 1; } if(n <= 2){ cout << "1\n"; return; } int rt = 1; while(deg[rt] == 1)rt ++; dfs(rt,0); int ans0 = ans; ans = 0; B = 1; dfs(rt,0); // cerr << ans << ' ' << ans0 << '\n'; ans0 = (ans0 + P - ans) % P; cout << ans0 *bs % P << '\n'; } signed main(){ freopen("traverse.in","r",stdin); freopen("traverse.out","w",stdout); double nw = clock(); cin.tie(0),cout.tie(0),ios::sync_with_stdio(0); int T,c;cin >> c >> T;while(T --){ solve(); ans = 0; B = 0; for(int i = 1;i <= 2e5;i ++)head[i] = w[i] = deg[i] = 0; ind = 0; } cerr << (clock() - nw) / CLOCKS_PER_SEC << "s\n"; }