#include <bits/stdc++.h>
#define ll long long
#define all(v) v.begin(),v.end()
#define MASK(i) (1LL << (i))
#define ii pair<int,int>
#define fi first
#define se second
#define endl '\n'
#define forr(i,l,r,add) for(int i = l;i <= r; i = i + add)
#define fodd(i,l,r,sub) for(int i = l;i >= r ; i = i - sub)
template <typename T1, typename T2> bool minimize(T1 &a, T2 b) {if (a > b) {a = b; return true;} return false;}
template <typename T1, typename T2> bool maximize(T1 &a, T2 b) {if (a < b) {a = b; return true;} return false;}
using namespace std;
mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());
#define rand rd
long long Rand(long long l , long long h){
assert(l <= h);
return l + 1ll * rd() % (h - l + 1) * (rd() % (h - l + 1)) % (h - l + 1);
}
//////////////////////////////////////////////////////////// end of template ////////////////////////////////////////////////////////////
const int MAX = 4e5 + 5 , MOD = 1e9 + 7;
int n , q;
vector <int> edge[MAX];
int st[MAX] , en[MAX] , cnt_eleur , val_dinh[MAX];
int RMQ[MAX][20] , cnt_RMQ , in[MAX];
int P[MAX];
int H[MAX];
int par[MAX];
int POW[50];
bool ok[MAX];
void dfs(int u){
H[u] = H[par[u]] + 1;
st[u] = ++cnt_eleur;
val_dinh[st[u]] = u;
RMQ[++cnt_RMQ][0] = cnt_eleur;
in[cnt_eleur] = cnt_RMQ;
for(auto x : edge[u]) if(x != par[u]){
par[x] = u;
dfs(x);
RMQ[++cnt_RMQ][0] = st[u];
}
en[u] = cnt_eleur;
}
void build_RMQ(){
dfs(1);
POW[0] = 1;
forr(j , 1 , 20 , 1){
POW[j] = POW[j - 1] * 2;
if(POW[j] > 2 * n) break;
P[POW[j]] = j;
forr(i , 1 , cnt_RMQ - POW[j] + 1 , 1) RMQ[i][j] = min(RMQ[i][j - 1] , RMQ[i + POW[j - 1]][j - 1]);
}
forr(i , 1 , 2 * n , 1) maximize(P[i] , P[i - 1]);
}
int num , dinh[MAX];
int GET_LCA(int x , int y){
x = in[st[x]] , y = in[st[y]];
if(x > y) swap(x , y);
int cl = y - x + 1;
//cout << " HOW " << x << ' ' << y << endl << min(RMQ[x][P[cl]] , RMQ[y - POW[P[cl]] + 1][P[cl]]) << endl;
return val_dinh[min(RMQ[x][P[cl]] , RMQ[y - POW[P[cl]] + 1][P[cl]])];
}
bool check(int x , int y){
return st[x] < st[y];
}
vector <ii> adj[MAX];
ii dp[MAX] , dp2[MAX];
void add(int &x , int y){
x = x + y;
if(x >= MOD) x = x - MOD;
}
void sub(int &x , int y){
x = x - y;
if(x < 0) x = x + MOD;
}
int res = 0;
void dfs_dp1(int u){
dp[u] = {0 , 0};
for(auto x : adj[u]){
dfs_dp1(x.fi);
add(dp[u].fi , dp[x.fi].fi);
dp[u].se = (dp[u].se + dp[x.fi].se + 1ll * dp[x.fi].fi * x.se) % MOD;
}
if(ok[u]) add(dp[u].fi , u) , res = (res + 1ll * u * dp[u].se) % MOD;
}
void dfs_dp2(int u){
if(ok[u]) res = (res + u * 1ll * dp2[u].se) % MOD;
//cout << u << ' ' << dp2[u].fi << ' ' << dp2[u].se << endl;
add(dp2[u].fi , dp[u].fi) , add(dp2[u].se , dp[u].se);
for(auto x : adj[u]){
dp2[x.fi] = dp2[u];
sub(dp2[x.fi].fi , dp[x.fi].fi);
sub(dp2[x.fi].se , dp[x.fi].se);
add(dp2[x.fi].se , 1ll * dp2[x.fi].fi * x.se % MOD);
sub(dp2[x.fi].se , 1ll * dp[x.fi].fi * x.se % MOD);
dfs_dp2(x.fi);
}
}
void query(){
res = 0;
cin >> num;
forr(i , 1 , num , 1){
cin >> dinh[i];
}
sort(dinh + 1 , dinh + 1 + num , check);
dinh[num + 1] = dinh[1];
vector <int> save;
forr(i , 1 , num , 1){
save.push_back(dinh[i]);
save.push_back(GET_LCA(dinh[i] , dinh[i + 1]));
//cout << dinh[i] << ' ' << dinh[i + 1] << ' ' << GET_LCA(dinh[i] , dinh[i + 1]) << endl;
}
sort(all(save) , check);
save.resize(unique(all(save)) - save.begin());
for(auto &x : save){
adj[x].clear();
ok[x] = 0;
//cout << x << ' ';
//cout << st[x] << endl;
}
forr(i , 1 , num , 1){
ok[dinh[i]] = 1;
//cout << dinh[i] << ' ' << endl;
}
stack <int> sta;
sta.push(save[0]);
forr(i , 1 , (int)save.size() - 1 , 1){
int x = save[i];
//cout << sta.size() << endl;
while(st[x] > en[sta.top()]) sta.pop();
//cout << i << ' ' << sta.size() << endl;
adj[sta.top()].push_back({x , -H[sta.top()] + H[x]});
//cout << sta.top() << ' ' << x << ' ' << -H[sta.top()] + H[x] << endl;
sta.push(x);
}
dfs_dp1(save[0]);
dp2[save[0]] = {0 , 0};
//cout << res << endl;
//forr(i , 1 , 3 , 1) cout << dp[i].fi << ' ' << dp[i].se << endl;
dfs_dp2(save[0]);
//cout << res << endl;
//forr(i , 1 , 3 , 1) cout << dp2[i].fi << ' ' << dp2[i].se << endl;
cout << (1ll * res * 500000004) % MOD << endl;
}
void INP(){
cin >> n >> q;
forr(i , 1 , n - 1 , 1){
int x , y;
cin >> x >> y;
edge[x].push_back(y);
edge[y].push_back(x);
}
build_RMQ();
while(q--){
query();
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
#define TASK "file"
//freopen(TASK".inp" , "r" , stdin);
//freopen(TASK".out" , "w" , stdout);
INP();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgYWxsKHYpIHYuYmVnaW4oKSx2LmVuZCgpCiNkZWZpbmUgTUFTSyhpKSAoMUxMIDw8IChpKSkKI2RlZmluZSBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBlbmRsICdcbicKI2RlZmluZSBmb3JyKGksbCxyLGFkZCkgZm9yKGludCBpID0gbDtpIDw9IHI7IGkgPSBpICsgYWRkKQojZGVmaW5lIGZvZGQoaSxsLHIsc3ViKSBmb3IoaW50IGkgPSBsO2kgPj0gciA7IGkgPSBpIC0gc3ViKQp0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPiBib29sIG1pbmltaXplKFQxICZhLCBUMiBiKSB7aWYgKGEgPiBiKSB7YSA9IGI7IHJldHVybiB0cnVlO30gcmV0dXJuIGZhbHNlO30KdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4gYm9vbCBtYXhpbWl6ZShUMSAmYSwgVDIgYikge2lmIChhIDwgYikge2EgPSBiOyByZXR1cm4gdHJ1ZTt9IHJldHVybiBmYWxzZTt9Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbXQxOTkzNyByZChjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpOwojZGVmaW5lIHJhbmQgcmQKCmxvbmcgbG9uZyBSYW5kKGxvbmcgbG9uZyBsICwgbG9uZyBsb25nIGgpewoJYXNzZXJ0KGwgPD0gaCk7CglyZXR1cm4gbCArIDFsbCAqIHJkKCkgJSAoaCAtIGwgKyAxKSAqIChyZCgpICUgKGggLSBsICsgMSkpICUgKGggLSBsICsgMSk7Cn0KCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gZW5kIG9mIHRlbXBsYXRlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKY29uc3QgaW50IE1BWCA9IDRlNSArIDUgLCBNT0QgPSAxZTkgKyA3OwppbnQgbiAsIHE7CnZlY3RvciA8aW50PiBlZGdlW01BWF07CmludCBzdFtNQVhdICwgZW5bTUFYXSAsIGNudF9lbGV1ciAsIHZhbF9kaW5oW01BWF07CmludCBSTVFbTUFYXVsyMF0gLCBjbnRfUk1RICwgaW5bTUFYXTsKaW50IFBbTUFYXTsKaW50IEhbTUFYXTsKaW50IHBhcltNQVhdOwppbnQgUE9XWzUwXTsKYm9vbCBva1tNQVhdOwoKdm9pZCBkZnMoaW50IHUpewogICAgSFt1XSA9IEhbcGFyW3VdXSArIDE7CiAgICBzdFt1XSA9ICsrY250X2VsZXVyOwogICAgdmFsX2Rpbmhbc3RbdV1dID0gdTsKICAgIFJNUVsrK2NudF9STVFdWzBdID0gY250X2VsZXVyOwogICAgaW5bY250X2VsZXVyXSA9IGNudF9STVE7CiAgICBmb3IoYXV0byB4IDogZWRnZVt1XSkgaWYoeCAhPSBwYXJbdV0pewogICAgICAgIHBhclt4XSA9IHU7CiAgICAgICAgZGZzKHgpOwogICAgICAgIFJNUVsrK2NudF9STVFdWzBdID0gc3RbdV07CiAgICB9CiAgICBlblt1XSA9IGNudF9lbGV1cjsKfQoKdm9pZCBidWlsZF9STVEoKXsKICAgIGRmcygxKTsKICAgIFBPV1swXSA9IDE7CiAgICBmb3JyKGogLCAxICwgMjAgLCAxKXsKICAgICAgICBQT1dbal0gPSBQT1dbaiAtIDFdICogMjsKICAgICAgICBpZihQT1dbal0gPiAyICogbikgYnJlYWs7CiAgICAgICAgUFtQT1dbal1dID0gajsKICAgICAgICBmb3JyKGkgLCAxICwgY250X1JNUSAtIFBPV1tqXSArIDEgLCAxKSBSTVFbaV1bal0gPSBtaW4oUk1RW2ldW2ogLSAxXSAsIFJNUVtpICsgUE9XW2ogLSAxXV1baiAtIDFdKTsKICAgIH0KICAgIGZvcnIoaSAsIDEgLCAyICogbiAsIDEpIG1heGltaXplKFBbaV0gLCBQW2kgLSAxXSk7Cn0KCmludCBudW0gLCBkaW5oW01BWF07CgppbnQgR0VUX0xDQShpbnQgeCAsIGludCB5KXsKICAgIHggPSBpbltzdFt4XV0gLCB5ID0gaW5bc3RbeV1dOwogICAgaWYoeCA+IHkpIHN3YXAoeCAsIHkpOwogICAgaW50IGNsID0geSAtIHggKyAxOwogICAgLy9jb3V0IDw8ICIgSE9XICIgPDwgeCA8PCAnICcgPDwgeSA8PCBlbmRsIDw8IG1pbihSTVFbeF1bUFtjbF1dICwgUk1RW3kgLSBQT1dbUFtjbF1dICsgMV1bUFtjbF1dKSA8PCBlbmRsOwogICAgcmV0dXJuIHZhbF9kaW5oW21pbihSTVFbeF1bUFtjbF1dICwgUk1RW3kgLSBQT1dbUFtjbF1dICsgMV1bUFtjbF1dKV07Cn0KCmJvb2wgY2hlY2soaW50IHggLCBpbnQgeSl7CiAgICByZXR1cm4gc3RbeF0gPCBzdFt5XTsKfQoKdmVjdG9yIDxpaT4gYWRqW01BWF07CmlpIGRwW01BWF0gLCBkcDJbTUFYXTsKCnZvaWQgYWRkKGludCAmeCAsIGludCB5KXsKICAgIHggPSB4ICsgeTsKICAgIGlmKHggPj0gTU9EKSB4ID0geCAtIE1PRDsKfQoKdm9pZCBzdWIoaW50ICZ4ICwgaW50IHkpewogICAgeCA9IHggLSB5OwogICAgaWYoeCA8IDApIHggPSB4ICsgTU9EOwp9CgppbnQgcmVzID0gMDsKCnZvaWQgZGZzX2RwMShpbnQgdSl7CiAgICBkcFt1XSA9IHswICwgMH07CiAgICBmb3IoYXV0byB4IDogYWRqW3VdKXsKICAgICAgICBkZnNfZHAxKHguZmkpOwogICAgICAgIGFkZChkcFt1XS5maSAsIGRwW3guZmldLmZpKTsKICAgICAgICBkcFt1XS5zZSA9IChkcFt1XS5zZSArIGRwW3guZmldLnNlICsgMWxsICogZHBbeC5maV0uZmkgKiB4LnNlKSAlIE1PRDsKICAgIH0KICAgIGlmKG9rW3VdKSBhZGQoZHBbdV0uZmkgLCB1KSAsIHJlcyA9IChyZXMgKyAxbGwgKiB1ICogZHBbdV0uc2UpICUgTU9EOwp9Cgp2b2lkIGRmc19kcDIoaW50IHUpewogICAgaWYob2tbdV0pIHJlcyA9IChyZXMgKyB1ICogMWxsICogZHAyW3VdLnNlKSAlIE1PRDsKICAgIC8vY291dCA8PCB1IDw8ICcgJyA8PCBkcDJbdV0uZmkgPDwgJyAnIDw8IGRwMlt1XS5zZSA8PCBlbmRsOwogICAgYWRkKGRwMlt1XS5maSAsIGRwW3VdLmZpKSAsIGFkZChkcDJbdV0uc2UgLCBkcFt1XS5zZSk7CiAgICBmb3IoYXV0byB4IDogYWRqW3VdKXsKICAgICAgICBkcDJbeC5maV0gPSBkcDJbdV07CiAgICAgICAgc3ViKGRwMlt4LmZpXS5maSAsIGRwW3guZmldLmZpKTsKICAgICAgICBzdWIoZHAyW3guZmldLnNlICwgZHBbeC5maV0uc2UpOwogICAgICAgIGFkZChkcDJbeC5maV0uc2UgLCAxbGwgKiBkcDJbeC5maV0uZmkgKiB4LnNlICUgTU9EKTsKICAgICAgICBzdWIoZHAyW3guZmldLnNlICwgMWxsICogZHBbeC5maV0uZmkgKiB4LnNlICUgTU9EKTsKICAgICAgICBkZnNfZHAyKHguZmkpOwogICAgfQp9Cgp2b2lkIHF1ZXJ5KCl7CiAgICByZXMgPSAwOwogICAgY2luID4+IG51bTsKICAgIGZvcnIoaSAsIDEgLCBudW0gLCAxKXsKICAgICAgICBjaW4gPj4gZGluaFtpXTsKICAgIH0KICAgIHNvcnQoZGluaCArIDEgLCBkaW5oICsgMSArIG51bSAsIGNoZWNrKTsKICAgIGRpbmhbbnVtICsgMV0gPSBkaW5oWzFdOwogICAgdmVjdG9yIDxpbnQ+IHNhdmU7CiAgICBmb3JyKGkgLCAxICwgbnVtICwgMSl7CiAgICAgICAgc2F2ZS5wdXNoX2JhY2soZGluaFtpXSk7CiAgICAgICAgc2F2ZS5wdXNoX2JhY2soR0VUX0xDQShkaW5oW2ldICwgZGluaFtpICsgMV0pKTsKICAgICAgICAvL2NvdXQgPDwgZGluaFtpXSA8PCAnICcgPDwgZGluaFtpICsgMV0gPDwgJyAnIDw8IEdFVF9MQ0EoZGluaFtpXSAsIGRpbmhbaSArIDFdKSA8PCBlbmRsOwogICAgfQogICAgc29ydChhbGwoc2F2ZSkgLCBjaGVjayk7CiAgICBzYXZlLnJlc2l6ZSh1bmlxdWUoYWxsKHNhdmUpKSAtIHNhdmUuYmVnaW4oKSk7CiAgICBmb3IoYXV0byAmeCA6IHNhdmUpewogICAgICAgIGFkalt4XS5jbGVhcigpOwogICAgICAgIG9rW3hdID0gMDsKICAgICAgICAvL2NvdXQgPDwgeCA8PCAnICc7CiAgICAgICAgLy9jb3V0IDw8IHN0W3hdIDw8IGVuZGw7CiAgICB9CiAgICBmb3JyKGkgLCAxICwgbnVtICwgMSl7CiAgICAgICAgb2tbZGluaFtpXV0gPSAxOwogICAgICAgIC8vY291dCA8PCBkaW5oW2ldIDw8ICcgJyA8PCBlbmRsOwogICAgfQogICAgc3RhY2sgPGludD4gc3RhOwogICAgc3RhLnB1c2goc2F2ZVswXSk7CiAgICBmb3JyKGkgLCAxICwgKGludClzYXZlLnNpemUoKSAtIDEgLCAxKXsKICAgICAgICBpbnQgeCA9IHNhdmVbaV07CiAgICAgICAgLy9jb3V0IDw8IHN0YS5zaXplKCkgPDwgZW5kbDsKICAgICAgICB3aGlsZShzdFt4XSA+IGVuW3N0YS50b3AoKV0pIHN0YS5wb3AoKTsKICAgICAgICAvL2NvdXQgPDwgaSA8PCAnICcgPDwgc3RhLnNpemUoKSA8PCBlbmRsOwogICAgICAgIGFkaltzdGEudG9wKCldLnB1c2hfYmFjayh7eCAsIC1IW3N0YS50b3AoKV0gKyBIW3hdfSk7CiAgICAgICAgLy9jb3V0IDw8IHN0YS50b3AoKSA8PCAnICcgPDwgeCA8PCAnICcgPDwgLUhbc3RhLnRvcCgpXSArIEhbeF0gPDwgZW5kbDsKICAgICAgICBzdGEucHVzaCh4KTsKICAgIH0KICAgIGRmc19kcDEoc2F2ZVswXSk7CiAgICBkcDJbc2F2ZVswXV0gPSB7MCAsIDB9OwogICAgLy9jb3V0IDw8IHJlcyA8PCBlbmRsOwogICAgLy9mb3JyKGkgLCAxICwgMyAsIDEpIGNvdXQgPDwgZHBbaV0uZmkgPDwgJyAnIDw8IGRwW2ldLnNlIDw8IGVuZGw7CiAgICBkZnNfZHAyKHNhdmVbMF0pOwogICAgLy9jb3V0IDw8IHJlcyA8PCBlbmRsOwogICAgLy9mb3JyKGkgLCAxICwgMyAsIDEpIGNvdXQgPDwgZHAyW2ldLmZpIDw8ICcgJyA8PCBkcDJbaV0uc2UgPDwgZW5kbDsKICAgIGNvdXQgPDwgKDFsbCAqIHJlcyAqIDUwMDAwMDAwNCkgJSBNT0QgPDwgZW5kbDsKfQoKdm9pZCBJTlAoKXsKICAgIGNpbiA+PiBuID4+IHE7CiAgICBmb3JyKGkgLCAxICwgbiAtIDEgLCAxKXsKICAgICAgICBpbnQgeCAsIHk7CiAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICBlZGdlW3hdLnB1c2hfYmFjayh5KTsKICAgICAgICBlZGdlW3ldLnB1c2hfYmFjayh4KTsKICAgIH0KICAgIGJ1aWxkX1JNUSgpOwogICAgd2hpbGUocS0tKXsKICAgICAgICBxdWVyeSgpOwogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogICAgI2RlZmluZSBUQVNLICJmaWxlIgogICAgLy9mcmVvcGVuKFRBU0siLmlucCIgLCAiciIgLCBzdGRpbik7CiAgICAvL2ZyZW9wZW4oVEFTSyIub3V0IiAsICJ3IiAsIHN0ZG91dCk7CiAgICBJTlAoKTsKICAgIHJldHVybiAwOwp9Cg==