#include <bits/stdc++.h>
#define name "test"
#define FOR(i, a, b) for (int i = (a); i <= (int)(b); i++)
#define ll long long
#define fi first
#define se second
#define ii pair<int,int>
#define pb push_back
#define sz(a) a.size()
#define mingdu signed main()
using namespace std;
const int N = 2e5 + 5;
const int LOG = 20;
const ll MOD = 1e9 + 7;
int n, q;
vector<int> g[N];
int h[N], id[N];
vector<int> euler, dep;
int st[LOG][2 * N];
int pw2[2 * N];
int tin[N], tout[N], timer;
void dfs1_iter(int root) {
timer = 0;
vector<pair<int,int>> stk;
stk.reserve(n * 2);
stk.push_back({root, 0});
while (!stk.empty()) {
auto cur = stk.back(); stk.pop_back();
int u = cur.first, p = cur.second;
if (u > 0) {
tin[u] = ++timer;
stk.push_back({-u, p});
for (int i = (int)g[u].size() - 1; i >= 0; --i) {
int v = g[u][i];
if (v == p) continue;
stk.push_back({v, u});
}
} else {
u = -u;
tout[u] = ++timer;
}
}
}
bool is_anc(int a, int b) {
return tin[a] <= tin[b] && tout[b] <= tout[a];
}
struct SNode { int u, p, idx; };
void dfs2_iter(int root) {
euler.clear(); dep.clear();
vector<SNode> stk;
stk.reserve(n * 2);
stk.push_back({root, 0, 0});
while (!stk.empty()) {
SNode &top = stk.back();
int u = top.u, p = top.p, &idx = top.idx;
if (idx == 0) {
id[u] = sz(euler);
euler.pb(u);
dep.pb(h[u]);
}
if (idx < (int)g[u].size()) {
int v = g[u][idx++];
if (v == p) continue;
h[v] = h[u] + 1;
stk.push_back({v, u, 0});
} else {
stk.pop_back();
if (!stk.empty()) {
int par = stk.back().u;
euler.pb(par);
dep.pb(h[par]);
}
}
}
}
void RMQ() {
int m = sz(dep);
if (m == 0) return;
for (int i = 0; i < m; ++i) st[0][i] = i;
for (int k = 1; (1 << k) <= m; ++k)
for (int i = 0; i + (1 << k) <= m; ++i) {
int x = st[k - 1][i];
int y = st[k - 1][i + (1 << (k - 1))];
st[k][i] = (dep[x] < dep[y] ? x : y);
}
pw2[0] = 0;
if (m >= 1) pw2[1] = 0;
for (int i = 2; i <= m; ++i) pw2[i] = pw2[i / 2] + 1;
}
int lca(int u, int v) {
int L = id[u], R = id[v];
if (L > R) swap(L, R);
int len = R - L + 1;
int k = pw2[len];
int x = st[k][L], y = st[k][R - (1 << k) + 1];
return dep[x] < dep[y] ? euler[x] : euler[y];
}
vector<int> Nodes;
vector<int> adj[N];
bool cmp(const int &a, const int &b) {
return tin[a] < tin[b];
}
int build(vector<int> nodes) {
sort(nodes.begin(), nodes.end(), cmp);
Nodes = nodes;
FOR(i, 0, sz(nodes) - 2)
Nodes.pb(lca(nodes[i], nodes[i + 1]));
sort(Nodes.begin(), Nodes.end(), cmp);
Nodes.erase(unique(Nodes.begin(), Nodes.end()), Nodes.end());
for (int x : Nodes) adj[x].clear();
vector<int> stk;
stk.reserve(sz(Nodes));
stk.push_back(Nodes[0]);
FOR(i, 1, sz(Nodes) - 1) {
int u = Nodes[i];
while (!stk.empty() && !is_anc(stk.back(), u)) stk.pop_back();
if (!stk.empty()) adj[stk.back()].pb(u);
stk.pb(u);
}
return Nodes[0];
}
ll solve_query(vector<int> &nodes) {
int root = build(nodes);
ll total_sum = 0;
static bool inS[N];
for (int x : Nodes) inS[x] = 0;
for (int x : nodes) {
inS[x] = 1;
total_sum = (total_sum + x) % MOD;
}
ll ans = 0;
static ll sumSub[N];
vector<int> order;
order.reserve(sz(Nodes));
stack<int> stck;
stck.push(root);
while (!stck.empty()) {
int u = stck.top(); stck.pop();
order.pb(u);
for (int v : adj[u]) stck.push(v);
}
for (int i = sz(order) - 1; i >= 0; --i) {
int u = order[i];
ll cur = (inS[u] ? u % MOD : 0);
for (int v : adj[u]) {
cur += sumSub[v];
if (cur >= MOD) cur -= MOD;
}
sumSub[u] = cur;
for (int v : adj[u]) {
ll s = sumSub[v];
ll other = (total_sum - s + MOD) % MOD;
ll len = h[v] - h[u];
ll tmp = len * s % MOD * other % MOD;
ans = (ans + tmp) % MOD;
}
}
return ans;
}
void nhap() {
cin >> n >> q;
FOR(i, 1, n - 1) {
int u, v; cin >> u >> v;
g[u].pb(v); g[v].pb(u);
}
h[1] = 0;
dfs1_iter(1);
dfs2_iter(1);
RMQ();
}
void giai() {
while (q--) {
int k; cin >> k;
vector<int> nodes(k);
FOR(i, 0, k - 1) cin >> nodes[i];
cout << solve_query(nodes) << '\n';
}
}
mingdu {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(name".inp", "r")) {
freopen(name".inp", "r", stdin);
freopen(name".out", "w", stdout);
}
nhap();
giai();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIG5hbWUgInRlc3QiCiNkZWZpbmUgRk9SKGksIGEsIGIpIGZvciAoaW50IGkgPSAoYSk7IGkgPD0gKGludCkoYik7IGkrKykKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBzeihhKSBhLnNpemUoKQojZGVmaW5lIG1pbmdkdSBzaWduZWQgbWFpbigpCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE4gPSAyZTUgKyA1Owpjb25zdCBpbnQgTE9HID0gMjA7CmNvbnN0IGxsIE1PRCA9IDFlOSArIDc7CgppbnQgbiwgcTsKdmVjdG9yPGludD4gZ1tOXTsKaW50IGhbTl0sIGlkW05dOwp2ZWN0b3I8aW50PiBldWxlciwgZGVwOwppbnQgc3RbTE9HXVsyICogTl07CmludCBwdzJbMiAqIE5dOwppbnQgdGluW05dLCB0b3V0W05dLCB0aW1lcjsKCnZvaWQgZGZzMV9pdGVyKGludCByb290KSB7CiAgICB0aW1lciA9IDA7CiAgICB2ZWN0b3I8cGFpcjxpbnQsaW50Pj4gc3RrOwogICAgc3RrLnJlc2VydmUobiAqIDIpOwogICAgc3RrLnB1c2hfYmFjayh7cm9vdCwgMH0pOwogICAgd2hpbGUgKCFzdGsuZW1wdHkoKSkgewogICAgICAgIGF1dG8gY3VyID0gc3RrLmJhY2soKTsgc3RrLnBvcF9iYWNrKCk7CiAgICAgICAgaW50IHUgPSBjdXIuZmlyc3QsIHAgPSBjdXIuc2Vjb25kOwogICAgICAgIGlmICh1ID4gMCkgewogICAgICAgICAgICB0aW5bdV0gPSArK3RpbWVyOwogICAgICAgICAgICBzdGsucHVzaF9iYWNrKHstdSwgcH0pOwogICAgICAgICAgICBmb3IgKGludCBpID0gKGludClnW3VdLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgICAgICAgICBpbnQgdiA9IGdbdV1baV07CiAgICAgICAgICAgICAgICBpZiAodiA9PSBwKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIHN0ay5wdXNoX2JhY2soe3YsIHV9KTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHUgPSAtdTsKICAgICAgICAgICAgdG91dFt1XSA9ICsrdGltZXI7CiAgICAgICAgfQogICAgfQp9Cgpib29sIGlzX2FuYyhpbnQgYSwgaW50IGIpIHsKICAgIHJldHVybiB0aW5bYV0gPD0gdGluW2JdICYmIHRvdXRbYl0gPD0gdG91dFthXTsKfQoKc3RydWN0IFNOb2RlIHsgaW50IHUsIHAsIGlkeDsgfTsKdm9pZCBkZnMyX2l0ZXIoaW50IHJvb3QpIHsKICAgIGV1bGVyLmNsZWFyKCk7IGRlcC5jbGVhcigpOwogICAgdmVjdG9yPFNOb2RlPiBzdGs7CiAgICBzdGsucmVzZXJ2ZShuICogMik7CiAgICBzdGsucHVzaF9iYWNrKHtyb290LCAwLCAwfSk7CiAgICB3aGlsZSAoIXN0ay5lbXB0eSgpKSB7CiAgICAgICAgU05vZGUgJnRvcCA9IHN0ay5iYWNrKCk7CiAgICAgICAgaW50IHUgPSB0b3AudSwgcCA9IHRvcC5wLCAmaWR4ID0gdG9wLmlkeDsKICAgICAgICBpZiAoaWR4ID09IDApIHsKICAgICAgICAgICAgaWRbdV0gPSBzeihldWxlcik7CiAgICAgICAgICAgIGV1bGVyLnBiKHUpOwogICAgICAgICAgICBkZXAucGIoaFt1XSk7CiAgICAgICAgfQogICAgICAgIGlmIChpZHggPCAoaW50KWdbdV0uc2l6ZSgpKSB7CiAgICAgICAgICAgIGludCB2ID0gZ1t1XVtpZHgrK107CiAgICAgICAgICAgIGlmICh2ID09IHApIGNvbnRpbnVlOwogICAgICAgICAgICBoW3ZdID0gaFt1XSArIDE7CiAgICAgICAgICAgIHN0ay5wdXNoX2JhY2soe3YsIHUsIDB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGsucG9wX2JhY2soKTsKICAgICAgICAgICAgaWYgKCFzdGsuZW1wdHkoKSkgewogICAgICAgICAgICAgICAgaW50IHBhciA9IHN0ay5iYWNrKCkudTsKICAgICAgICAgICAgICAgIGV1bGVyLnBiKHBhcik7CiAgICAgICAgICAgICAgICBkZXAucGIoaFtwYXJdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdm9pZCBSTVEoKSB7CiAgICBpbnQgbSA9IHN6KGRlcCk7CiAgICBpZiAobSA9PSAwKSByZXR1cm47CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG07ICsraSkgc3RbMF1baV0gPSBpOwogICAgZm9yIChpbnQgayA9IDE7ICgxIDw8IGspIDw9IG07ICsraykKICAgICAgICBmb3IgKGludCBpID0gMDsgaSArICgxIDw8IGspIDw9IG07ICsraSkgewogICAgICAgICAgICBpbnQgeCA9IHN0W2sgLSAxXVtpXTsKICAgICAgICAgICAgaW50IHkgPSBzdFtrIC0gMV1baSArICgxIDw8IChrIC0gMSkpXTsKICAgICAgICAgICAgc3Rba11baV0gPSAoZGVwW3hdIDwgZGVwW3ldID8geCA6IHkpOwogICAgICAgIH0KICAgIHB3MlswXSA9IDA7CiAgICBpZiAobSA+PSAxKSBwdzJbMV0gPSAwOwogICAgZm9yIChpbnQgaSA9IDI7IGkgPD0gbTsgKytpKSBwdzJbaV0gPSBwdzJbaSAvIDJdICsgMTsKfQoKaW50IGxjYShpbnQgdSwgaW50IHYpIHsKICAgIGludCBMID0gaWRbdV0sIFIgPSBpZFt2XTsKICAgIGlmIChMID4gUikgc3dhcChMLCBSKTsKICAgIGludCBsZW4gPSBSIC0gTCArIDE7CiAgICBpbnQgayA9IHB3MltsZW5dOwogICAgaW50IHggPSBzdFtrXVtMXSwgeSA9IHN0W2tdW1IgLSAoMSA8PCBrKSArIDFdOwogICAgcmV0dXJuIGRlcFt4XSA8IGRlcFt5XSA/IGV1bGVyW3hdIDogZXVsZXJbeV07Cn0KCnZlY3RvcjxpbnQ+IE5vZGVzOwp2ZWN0b3I8aW50PiBhZGpbTl07Cgpib29sIGNtcChjb25zdCBpbnQgJmEsIGNvbnN0IGludCAmYikgewogICAgcmV0dXJuIHRpblthXSA8IHRpbltiXTsKfQoKaW50IGJ1aWxkKHZlY3RvcjxpbnQ+IG5vZGVzKSB7CiAgICBzb3J0KG5vZGVzLmJlZ2luKCksIG5vZGVzLmVuZCgpLCBjbXApOwogICAgTm9kZXMgPSBub2RlczsKCiAgICBGT1IoaSwgMCwgc3oobm9kZXMpIC0gMikKICAgICAgICBOb2Rlcy5wYihsY2Eobm9kZXNbaV0sIG5vZGVzW2kgKyAxXSkpOwoKICAgIHNvcnQoTm9kZXMuYmVnaW4oKSwgTm9kZXMuZW5kKCksIGNtcCk7CiAgICBOb2Rlcy5lcmFzZSh1bmlxdWUoTm9kZXMuYmVnaW4oKSwgTm9kZXMuZW5kKCkpLCBOb2Rlcy5lbmQoKSk7CgogICAgZm9yIChpbnQgeCA6IE5vZGVzKSBhZGpbeF0uY2xlYXIoKTsKCiAgICB2ZWN0b3I8aW50PiBzdGs7CiAgICBzdGsucmVzZXJ2ZShzeihOb2RlcykpOwogICAgc3RrLnB1c2hfYmFjayhOb2Rlc1swXSk7CgogICAgRk9SKGksIDEsIHN6KE5vZGVzKSAtIDEpIHsKICAgICAgICBpbnQgdSA9IE5vZGVzW2ldOwogICAgICAgIHdoaWxlICghc3RrLmVtcHR5KCkgJiYgIWlzX2FuYyhzdGsuYmFjaygpLCB1KSkgc3RrLnBvcF9iYWNrKCk7CiAgICAgICAgaWYgKCFzdGsuZW1wdHkoKSkgYWRqW3N0ay5iYWNrKCldLnBiKHUpOwogICAgICAgIHN0ay5wYih1KTsKICAgIH0KCiAgICByZXR1cm4gTm9kZXNbMF07Cn0KCmxsIHNvbHZlX3F1ZXJ5KHZlY3RvcjxpbnQ+ICZub2RlcykgewogICAgaW50IHJvb3QgPSBidWlsZChub2Rlcyk7CiAgICBsbCB0b3RhbF9zdW0gPSAwOwogICAgc3RhdGljIGJvb2wgaW5TW05dOwogICAgZm9yIChpbnQgeCA6IE5vZGVzKSBpblNbeF0gPSAwOwogICAgZm9yIChpbnQgeCA6IG5vZGVzKSB7CiAgICAgICAgaW5TW3hdID0gMTsKICAgICAgICB0b3RhbF9zdW0gPSAodG90YWxfc3VtICsgeCkgJSBNT0Q7CiAgICB9CgogICAgbGwgYW5zID0gMDsKICAgIHN0YXRpYyBsbCBzdW1TdWJbTl07CiAgICB2ZWN0b3I8aW50PiBvcmRlcjsKICAgIG9yZGVyLnJlc2VydmUoc3ooTm9kZXMpKTsKICAgIHN0YWNrPGludD4gc3RjazsKICAgIHN0Y2sucHVzaChyb290KTsKICAgIHdoaWxlICghc3Rjay5lbXB0eSgpKSB7CiAgICAgICAgaW50IHUgPSBzdGNrLnRvcCgpOyBzdGNrLnBvcCgpOwogICAgICAgIG9yZGVyLnBiKHUpOwogICAgICAgIGZvciAoaW50IHYgOiBhZGpbdV0pIHN0Y2sucHVzaCh2KTsKICAgIH0KCiAgICBmb3IgKGludCBpID0gc3oob3JkZXIpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICBpbnQgdSA9IG9yZGVyW2ldOwogICAgICAgIGxsIGN1ciA9IChpblNbdV0gPyB1ICUgTU9EIDogMCk7CiAgICAgICAgZm9yIChpbnQgdiA6IGFkalt1XSkgewogICAgICAgICAgICBjdXIgKz0gc3VtU3ViW3ZdOwogICAgICAgICAgICBpZiAoY3VyID49IE1PRCkgY3VyIC09IE1PRDsKICAgICAgICB9CiAgICAgICAgc3VtU3ViW3VdID0gY3VyOwoKICAgICAgICBmb3IgKGludCB2IDogYWRqW3VdKSB7CiAgICAgICAgICAgIGxsIHMgPSBzdW1TdWJbdl07CiAgICAgICAgICAgIGxsIG90aGVyID0gKHRvdGFsX3N1bSAtIHMgKyBNT0QpICUgTU9EOwogICAgICAgICAgICBsbCBsZW4gPSBoW3ZdIC0gaFt1XTsKICAgICAgICAgICAgbGwgdG1wID0gbGVuICogcyAlIE1PRCAqIG90aGVyICUgTU9EOwogICAgICAgICAgICBhbnMgPSAoYW5zICsgdG1wKSAlIE1PRDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGFuczsKfQoKdm9pZCBuaGFwKCkgewogICAgY2luID4+IG4gPj4gcTsKICAgIEZPUihpLCAxLCBuIC0gMSkgewogICAgICAgIGludCB1LCB2OyBjaW4gPj4gdSA+PiB2OwogICAgICAgIGdbdV0ucGIodik7IGdbdl0ucGIodSk7CiAgICB9CiAgICBoWzFdID0gMDsKICAgIGRmczFfaXRlcigxKTsKICAgIGRmczJfaXRlcigxKTsKICAgIFJNUSgpOwp9Cgp2b2lkIGdpYWkoKSB7CiAgICB3aGlsZSAocS0tKSB7CiAgICAgICAgaW50IGs7IGNpbiA+PiBrOwogICAgICAgIHZlY3RvcjxpbnQ+IG5vZGVzKGspOwogICAgICAgIEZPUihpLCAwLCBrIC0gMSkgY2luID4+IG5vZGVzW2ldOwogICAgICAgIGNvdXQgPDwgc29sdmVfcXVlcnkobm9kZXMpIDw8ICdcbic7CiAgICB9Cn0KCm1pbmdkdSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CgogICAgaWYgKGZvcGVuKG5hbWUiLmlucCIsICJyIikpIHsKICAgICAgICBmcmVvcGVuKG5hbWUiLmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4obmFtZSIub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQoKICAgIG5oYXAoKTsKICAgIGdpYWkoKTsKCiAgICByZXR1cm4gMDsKfQo=