#include using namespace std; #define pb push_back typedef long long ll; const int N = 1e5+5,mod = 1e9+7,inv2 = (mod+1)>>1; int n,k,a[N],d[N]; ll ans,inv[N],U[N],V[N]; vectore[N]; ll res,c[N],fac[N]; int dep[N]; void dfs(int u,int fa) { dep[u] = dep[fa]+1; for(auto v:e[u]) if(v != fa) dfs(v,u); } void dfs2(int u,int fa) { c[u] = 0; for(auto v:e[u]) if(v != fa) { dfs2(v,u); res = (res - c[u]*inv[e[u].size()-1]%mod*c[v]%mod + mod)%mod; c[u] = (c[u] + c[v])%mod; } if(e[u].size() > 1) c[u] = c[u]*inv[e[u].size()-1]%mod; if(d[u]) { res = (res - c[u] + mod)%mod; c[u] = 1; } } void solve() { cin>>n>>k;ans = 1; for(int i = 1;i <= n;i++) e[i].clear(),d[i] = 0; inv[1] = 1; fac[0] = 1; for(int i = 1;i <= n;i++) fac[i] = fac[i-1]*i%mod; for(int i = 2;i <= n;i++) inv[i] = mod - mod/i*inv[mod%i]%mod; for(int i = 1,u,v;i < n;i++) { cin>>u>>v; U[i] = u,V[i] = v; e[u].pb(v),e[v].pb(u); } for(int i = 1;i <= n;i++) ans = ans*fac[e[i].size()-1]%mod; res = k; dfs(1,0); for(int i = 1,j;i <= k;i++) { cin>>j; if(dep[U[j]] > dep[V[j]]) d[U[j]] = 1; else d[V[j]] = 1; } dfs2(1,0); cout<>c>>T; while(T--) solve(); return 0; } //