#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9+7;
using ll = long long;
int N,Q,LOG;
vector<vector<int>> up;
vector<int> depth, tin, tout;
vector<vector<int>> g;
int timer=0;
void dfs0(int u, int p){
tin[u]=++timer;
up[0][u]= (p==-1 ? u : p);
for(int k=1;k<LOG;k++) up[k][u]=up[k-1][ up[k-1][u] ];
for(int v: g[u]) if(v!=p){
depth[v]=depth[u]+1;
dfs0(v,u);
}
tout[u]=timer;
}
bool is_anc(int u,int v){
return tin[u]<=tin[v] && tout[v]<=tout[u];
}
int lca(int u,int v){
if(is_anc(u,v)) return u;
if(is_anc(v,u)) return v;
for(int k=LOG-1;k>=0;k--){
int x=up[k][u];
if(!is_anc(x,v)) u=x;
}
return up[0][u];
}
int dist(int u,int v){ return depth[u]+depth[v]-2*depth[lca(u,v)]; }
vector<vector<pair<int,int>>> vt;
vector<int> used, inS;
ll dfs_sum(int u){
ll s = inS[u]? u:0;
for(auto [v,w]: vt[u]){
ll sub = dfs_sum(v);
s += sub;
}
return s;
}
ll dfs_ans(int u, ll tot, ll &ans){
ll s = inS[u]? u:0;
for(auto [v,w]: vt[u]){
ll sub = dfs_ans(v, tot, ans);
ans = (ans + (ll)w % MOD * (sub%MOD) % MOD * ((tot - sub)%MOD + MOD) % MOD) % MOD;
s += sub;
}
return s;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>N>>Q;
g.assign(N+1,{});
for(int i=0;i<N-1;i++){
int u,v; cin>>u>>v;
g[u].push_back(v); g[v].push_back(u);
}
LOG = 1; while((1<<LOG) <= N) LOG++;
up.assign(LOG, vector<int>(N+1));
depth.assign(N+1,0);
tin.assign(N+1,0); tout.assign(N+1,0);
dfs0(1,-1);
vt.assign(N+1,{});
used.assign(N+1,0);
inS.assign(N+1,0);
while(Q--){
int K; cin>>K;
vector<int> a(K);
for(int i=0;i<K;i++) cin>>a[i];
sort(a.begin(), a.end());
a.erase(unique(a.begin(), a.end()), a.end());
K = (int)a.size();
ll totSum = 0;
for(int x: a){ inS[x]=1; totSum += x; }
vector<int> vtx = a;
sort(vtx.begin(), vtx.end(), [&](int x,int y){ return tin[x]<tin[y]; });
int m = vtx.size();
for(int i=0;i<m-1;i++) vtx.push_back(lca(vtx[i], vtx[i+1]));
sort(vtx.begin(), vtx.end(), [&](int x,int y){ return tin[x]<tin[y]; });
vtx.erase(unique(vtx.begin(), vtx.end()), vtx.end());
for(int x: vtx) vt[x].clear();
auto getLen = [&](int u,int v){ return dist(u,v); };
vector<int> st;
st.push_back(vtx[0]);
for(size_t i=1;i<vtx.size();i++){
int x = vtx[i];
while(!st.empty() && !is_anc(st.back(), x)){
int child = st.back(); st.pop_back();
int parent = st.back();
int w = getLen(parent, child);
vt[parent].push_back({child, w});
}
if(st.empty() || st.back()!=x) st.push_back(x);
}
while(st.size()>1){
int child = st.back(); st.pop_back();
int parent = st.back();
int w = getLen(parent, child);
vt[parent].push_back({child, w});
}
int root = st[0];
ll ans=0;
dfs_ans(root, totSum%MOD, ans);
cout<< (ans%MOD+MOD)%MOD << "\n";
for(int x: a) inS[x]=0;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBNT0QgPSAxZTkrNzsKdXNpbmcgbGwgPSBsb25nIGxvbmc7CgppbnQgTixRLExPRzsKdmVjdG9yPHZlY3RvcjxpbnQ+PiB1cDsKdmVjdG9yPGludD4gZGVwdGgsIHRpbiwgdG91dDsKdmVjdG9yPHZlY3RvcjxpbnQ+PiBnOwppbnQgdGltZXI9MDsKCnZvaWQgZGZzMChpbnQgdSwgaW50IHApewogICAgdGluW3VdPSsrdGltZXI7CiAgICB1cFswXVt1XT0gKHA9PS0xID8gdSA6IHApOwogICAgZm9yKGludCBrPTE7azxMT0c7aysrKSB1cFtrXVt1XT11cFtrLTFdWyB1cFtrLTFdW3VdIF07CiAgICBmb3IoaW50IHY6IGdbdV0pIGlmKHYhPXApewogICAgICAgIGRlcHRoW3ZdPWRlcHRoW3VdKzE7CiAgICAgICAgZGZzMCh2LHUpOwogICAgfQogICAgdG91dFt1XT10aW1lcjsKfQpib29sIGlzX2FuYyhpbnQgdSxpbnQgdil7IAogICAgcmV0dXJuIHRpblt1XTw9dGluW3ZdICYmIHRvdXRbdl08PXRvdXRbdV07Cn0KaW50IGxjYShpbnQgdSxpbnQgdil7CiAgICBpZihpc19hbmModSx2KSkgcmV0dXJuIHU7CiAgICBpZihpc19hbmModix1KSkgcmV0dXJuIHY7CiAgICBmb3IoaW50IGs9TE9HLTE7az49MDtrLS0pewogICAgICAgIGludCB4PXVwW2tdW3VdOwogICAgICAgIGlmKCFpc19hbmMoeCx2KSkgdT14OwogICAgfQogICAgcmV0dXJuIHVwWzBdW3VdOwp9CmludCBkaXN0KGludCB1LGludCB2KXsgcmV0dXJuIGRlcHRoW3VdK2RlcHRoW3ZdLTIqZGVwdGhbbGNhKHUsdildOyB9Cgp2ZWN0b3I8dmVjdG9yPHBhaXI8aW50LGludD4+PiB2dDsgCnZlY3RvcjxpbnQ+IHVzZWQsIGluUzsKbGwgZGZzX3N1bShpbnQgdSl7CiAgICBsbCBzID0gaW5TW3VdPyB1OjA7IAogICAgZm9yKGF1dG8gW3Ysd106IHZ0W3VdKXsKICAgICAgICBsbCBzdWIgPSBkZnNfc3VtKHYpOwogICAgICAgIHMgKz0gc3ViOwogICAgfQogICAgcmV0dXJuIHM7Cn0KbGwgZGZzX2FucyhpbnQgdSwgbGwgdG90LCBsbCAmYW5zKXsKICAgIGxsIHMgPSBpblNbdV0/IHU6MDsKICAgIGZvcihhdXRvIFt2LHddOiB2dFt1XSl7CiAgICAgICAgbGwgc3ViID0gZGZzX2Fucyh2LCB0b3QsIGFucyk7CiAgICAgICAgYW5zID0gKGFucyArIChsbCl3ICUgTU9EICogKHN1YiVNT0QpICUgTU9EICogKCh0b3QgLSBzdWIpJU1PRCArIE1PRCkgJSBNT0QpICUgTU9EOwogICAgICAgIHMgKz0gc3ViOwogICAgfQogICAgcmV0dXJuIHM7Cn0KCmludCBtYWluKCl7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgY2luPj5OPj5ROwogICAgZy5hc3NpZ24oTisxLHt9KTsKICAgIGZvcihpbnQgaT0wO2k8Ti0xO2krKyl7CiAgICAgICAgaW50IHUsdjsgY2luPj51Pj52OwogICAgICAgIGdbdV0ucHVzaF9iYWNrKHYpOyBnW3ZdLnB1c2hfYmFjayh1KTsKICAgIH0KICAgIExPRyA9IDE7IHdoaWxlKCgxPDxMT0cpIDw9IE4pIExPRysrOwogICAgdXAuYXNzaWduKExPRywgdmVjdG9yPGludD4oTisxKSk7CiAgICBkZXB0aC5hc3NpZ24oTisxLDApOwogICAgdGluLmFzc2lnbihOKzEsMCk7IHRvdXQuYXNzaWduKE4rMSwwKTsKICAgIGRmczAoMSwtMSk7CgogICAgdnQuYXNzaWduKE4rMSx7fSk7CiAgICB1c2VkLmFzc2lnbihOKzEsMCk7CiAgICBpblMuYXNzaWduKE4rMSwwKTsKCiAgICB3aGlsZShRLS0pewogICAgICAgIGludCBLOyBjaW4+Pks7CiAgICAgICAgdmVjdG9yPGludD4gYShLKTsKICAgICAgICBmb3IoaW50IGk9MDtpPEs7aSsrKSBjaW4+PmFbaV07CiAgICAgICAgc29ydChhLmJlZ2luKCksIGEuZW5kKCkpOwogICAgICAgIGEuZXJhc2UodW5pcXVlKGEuYmVnaW4oKSwgYS5lbmQoKSksIGEuZW5kKCkpOwogICAgICAgIEsgPSAoaW50KWEuc2l6ZSgpOwogICAgICAgIGxsIHRvdFN1bSA9IDA7CiAgICAgICAgZm9yKGludCB4OiBhKXsgaW5TW3hdPTE7IHRvdFN1bSArPSB4OyB9CgogICAgICAgIHZlY3RvcjxpbnQ+IHZ0eCA9IGE7CiAgICAgICAgc29ydCh2dHguYmVnaW4oKSwgdnR4LmVuZCgpLCBbJl0oaW50IHgsaW50IHkpeyByZXR1cm4gdGluW3hdPHRpblt5XTsgfSk7CiAgICAgICAgaW50IG0gPSB2dHguc2l6ZSgpOwogICAgICAgIGZvcihpbnQgaT0wO2k8bS0xO2krKykgdnR4LnB1c2hfYmFjayhsY2EodnR4W2ldLCB2dHhbaSsxXSkpOwogICAgICAgIHNvcnQodnR4LmJlZ2luKCksIHZ0eC5lbmQoKSwgWyZdKGludCB4LGludCB5KXsgcmV0dXJuIHRpblt4XTx0aW5beV07IH0pOwogICAgICAgIHZ0eC5lcmFzZSh1bmlxdWUodnR4LmJlZ2luKCksIHZ0eC5lbmQoKSksIHZ0eC5lbmQoKSk7CgogICAgICAgIGZvcihpbnQgeDogdnR4KSB2dFt4XS5jbGVhcigpOwoKICAgICAgICBhdXRvIGdldExlbiA9IFsmXShpbnQgdSxpbnQgdil7IHJldHVybiBkaXN0KHUsdik7IH07CiAgICAgICAgdmVjdG9yPGludD4gc3Q7CiAgICAgICAgc3QucHVzaF9iYWNrKHZ0eFswXSk7CiAgICAgICAgZm9yKHNpemVfdCBpPTE7aTx2dHguc2l6ZSgpO2krKyl7CiAgICAgICAgICAgIGludCB4ID0gdnR4W2ldOwogICAgICAgICAgICB3aGlsZSghc3QuZW1wdHkoKSAmJiAhaXNfYW5jKHN0LmJhY2soKSwgeCkpewogICAgICAgICAgICAgICAgaW50IGNoaWxkID0gc3QuYmFjaygpOyBzdC5wb3BfYmFjaygpOwogICAgICAgICAgICAgICAgaW50IHBhcmVudCA9IHN0LmJhY2soKTsKICAgICAgICAgICAgICAgIGludCB3ID0gZ2V0TGVuKHBhcmVudCwgY2hpbGQpOwogICAgICAgICAgICAgICAgdnRbcGFyZW50XS5wdXNoX2JhY2soe2NoaWxkLCB3fSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoc3QuZW1wdHkoKSB8fCBzdC5iYWNrKCkhPXgpIHN0LnB1c2hfYmFjayh4KTsKICAgICAgICB9CiAgICAgICAgd2hpbGUoc3Quc2l6ZSgpPjEpewogICAgICAgICAgICBpbnQgY2hpbGQgPSBzdC5iYWNrKCk7IHN0LnBvcF9iYWNrKCk7CiAgICAgICAgICAgIGludCBwYXJlbnQgPSBzdC5iYWNrKCk7CiAgICAgICAgICAgIGludCB3ID0gZ2V0TGVuKHBhcmVudCwgY2hpbGQpOwogICAgICAgICAgICB2dFtwYXJlbnRdLnB1c2hfYmFjayh7Y2hpbGQsIHd9KTsKICAgICAgICB9CiAgICAgICAgaW50IHJvb3QgPSBzdFswXTsKCiAgICAgICAgbGwgYW5zPTA7CiAgICAgICAgZGZzX2Fucyhyb290LCB0b3RTdW0lTU9ELCBhbnMpOwogICAgICAgIGNvdXQ8PCAoYW5zJU1PRCtNT0QpJU1PRCA8PCAiXG4iOwoKICAgICAgICBmb3IoaW50IHg6IGEpIGluU1t4XT0wOwogICAgfQogICAgcmV0dXJuIDA7Cn0K