//niceduck
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define FILE "000"
#define fastio ios_base::sync_with_stdio(0);cin.tie(0);
#define foru(i,a,b) for(int i=(int)(a); i<=(int)(b); ++i)
#define ford(i,a,b) for(int i=(int)(a); i>=(int)(b); --i)
#define fi first
#define se second
#define el "\n"
#define pb push_back
#define pii pair<int,int>
const int MAX=3e5+5,MOD=1e9+7;
int n,in[MAX];
ll cntLeaf,leaf[MAX],a[MAX],pass[MAX];
vector<int> adj[MAX];
void dfs(int u, int p)
{
if(in[u]==1)
{
leaf[u]=1;
return;
}
ll tmp=0;
for(int v:adj[u])
{
if(v==p) continue;
dfs(v,u);
leaf[u]+=leaf[v];
tmp+=(leaf[v]*(leaf[v]-1)/2);
}
// cout<<u<<' '<<leaf[u]<<' '<<in[u]<<el;;
pass[u]=(leaf[u]-1)*leaf[u]/2;
pass[u]-=tmp;
pass[u]+=leaf[u]*(cntLeaf-leaf[u]);
}
void reset()
{
cntLeaf=0;
foru(i,1,n)
{
leaf[i]=pass[i]=in[i]=0;
adj[i].clear();
}
}
int main()
{
fastio
if(fopen(FILE ".inp","r"))
{
freopen(FILE ".inp","r",stdin); freopen(FILE ".out", "w",stdout);
}
int t; cin>>t;
while(t--)
{
cin>>n;
reset();
foru(i,1,n) cin>>a[i];
foru(i,2,n)
{
int u,v; cin>>u>>v;
adj[u].pb(v);
adj[v].pb(u);
in[u]++; in[v]++;
}
int root=-1;
foru(i,1,n)
{
if(in[i]>1)
{
root=i;
break;
}
}
foru(i,1,n) if(in[i]==1) ++cntLeaf;
dfs(root,0);
vector<ll> v;
v.clear();
foru(i,1,n)
{
if(in[i]>1) v.pb(pass[i]);
else v.pb(cntLeaf-1);
}
sort(a+1,a+n+1);
sort(v.begin(),v.end());
ll ans=0;
foru(i,1,n) ans=(ans+(((v[i-1]%MOD)*a[i])%MOD))%MOD;
cout<<ans<<el;
}
return 0;
}
Ly9uaWNlZHVjawojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKI2RlZmluZSBGSUxFICIwMDAiCiNkZWZpbmUgZmFzdGlvIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTsKI2RlZmluZSBmb3J1KGksYSxiKSBmb3IoaW50IGk9KGludCkoYSk7IGk8PShpbnQpKGIpOyArK2kpCiNkZWZpbmUgZm9yZChpLGEsYikgZm9yKGludCBpPShpbnQpKGEpOyBpPj0oaW50KShiKTsgLS1pKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgZWwgIlxuIgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+Cgpjb25zdCBpbnQgTUFYPTNlNSs1LE1PRD0xZTkrNzsKaW50IG4saW5bTUFYXTsKbGwgY250TGVhZixsZWFmW01BWF0sYVtNQVhdLHBhc3NbTUFYXTsKdmVjdG9yPGludD4gYWRqW01BWF07Cgp2b2lkIGRmcyhpbnQgdSwgaW50IHApCnsKICAgIGlmKGluW3VdPT0xKQogICAgewogICAgICAgIGxlYWZbdV09MTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsbCB0bXA9MDsKICAgIGZvcihpbnQgdjphZGpbdV0pCiAgICB7CiAgICAgICAgaWYodj09cCkgY29udGludWU7CiAgICAgICAgZGZzKHYsdSk7CiAgICAgICAgbGVhZlt1XSs9bGVhZlt2XTsKICAgICAgICB0bXArPShsZWFmW3ZdKihsZWFmW3ZdLTEpLzIpOwogICAgfQovLyAgICBjb3V0PDx1PDwnICc8PGxlYWZbdV08PCcgJzw8aW5bdV08PGVsOzsKICAgIHBhc3NbdV09KGxlYWZbdV0tMSkqbGVhZlt1XS8yOwogICAgcGFzc1t1XS09dG1wOwogICAgcGFzc1t1XSs9bGVhZlt1XSooY250TGVhZi1sZWFmW3VdKTsKfQoKdm9pZCByZXNldCgpCnsKICAgIGNudExlYWY9MDsKICAgIGZvcnUoaSwxLG4pCiAgICB7CiAgICAgICAgbGVhZltpXT1wYXNzW2ldPWluW2ldPTA7CiAgICAgICAgYWRqW2ldLmNsZWFyKCk7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgZmFzdGlvCiAgICBpZihmb3BlbihGSUxFICIuaW5wIiwiciIpKQogICAgewogICAgICAgIGZyZW9wZW4oRklMRSAiLmlucCIsInIiLHN0ZGluKTsgZnJlb3BlbihGSUxFICIub3V0IiwgInciLHN0ZG91dCk7CiAgICB9CiAgICBpbnQgdDsgY2luPj50OwogICAgd2hpbGUodC0tKQogICAgewogICAgICAgIGNpbj4+bjsKICAgICAgICByZXNldCgpOwogICAgICAgIGZvcnUoaSwxLG4pIGNpbj4+YVtpXTsKICAgICAgICBmb3J1KGksMixuKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHUsdjsgY2luPj51Pj52OwogICAgICAgICAgICBhZGpbdV0ucGIodik7CiAgICAgICAgICAgIGFkalt2XS5wYih1KTsKICAgICAgICAgICAgaW5bdV0rKzsgaW5bdl0rKzsKICAgICAgICB9CiAgICAgICAgaW50IHJvb3Q9LTE7CiAgICAgICAgZm9ydShpLDEsbikKICAgICAgICB7CiAgICAgICAgICAgIGlmKGluW2ldPjEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJvb3Q9aTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvcnUoaSwxLG4pIGlmKGluW2ldPT0xKSArK2NudExlYWY7CiAgICAgICAgZGZzKHJvb3QsMCk7CiAgICAgICAgdmVjdG9yPGxsPiB2OwogICAgICAgIHYuY2xlYXIoKTsKICAgICAgICBmb3J1KGksMSxuKQogICAgICAgIHsKICAgICAgICAgICAgaWYoaW5baV0+MSkgdi5wYihwYXNzW2ldKTsKICAgICAgICAgICAgZWxzZSB2LnBiKGNudExlYWYtMSk7CiAgICAgICAgfQogICAgICAgIHNvcnQoYSsxLGErbisxKTsKICAgICAgICBzb3J0KHYuYmVnaW4oKSx2LmVuZCgpKTsKICAgICAgICBsbCBhbnM9MDsKICAgICAgICBmb3J1KGksMSxuKSBhbnM9KGFucysoKCh2W2ktMV0lTU9EKSphW2ldKSVNT0QpKSVNT0Q7CiAgICAgICAgY291dDw8YW5zPDxlbDsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==