// ROOT : DRAGON3012009 : WA in Real Life
#include <bits/stdc++.h>
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
#define ll long long
#define el "\n"
#define fi first
#define se second
#define _ROOT_ int main()
#define M 1000000007
#define MAXN 1000001
#define Bit(i) (1LL << i )
#define INF (1ll<<30)
#define NAME "file"
#define debug(a) cout << #a << " = " << a << endl;
using namespace std;
ll n, m, q ;
ll a[MAXN ] ;
ll sz[MAXN ] ;
vector<ll> adj[MAXN ] ;
ll Power(ll a, ll b ) { ll res = 1; while(b){ if(b&1) res = a*res%M; b>>=1; a=a*a%M; } return res; }
ll add(ll a, ll b ) { return a + b >= M ? a + b - M : a + b; }
ll mul(ll a, ll b ) { return 1LL * (a%M) * (b%M) % M; }
ll sub(ll a, ll b ) { return a - b < 0 ? a - b + M : a - b; }
ll divi(ll a, ll b) { return 1LL * a * Power(b, M - 2 ) % M; }
bool check(ll a ) {
ll t = sqrt(a ) ;
return t * t == a ;
}
void dfs(ll u , ll p ,ll &ans ) {
sz[u] = 1 ;
for(ll v : adj[u]) if(v != p ) {
dfs(v , u , ans ) ;
sz[u] += sz[v] ;
}
vector<ll> val ;
if(check(a[u])) {
for(ll v : adj[u]) if(v != p ) val.push_back(sz[v]) ;
val.push_back(n - sz[u]) ;
ll sum = 0 , pairr = 0 , trip = 0 ;
for(ll v : val ) {
trip = add(trip , mul(pairr , v )) ;
pairr = add(pairr , mul(sum , v )) ;
sum = add(sum , v ) ;
}
ans = add(ans , pairr ) ;
ans = add(ans , trip ) ;
}
}
void init() {
cin >> n ;
FOR(i , 2 , n ) {
ll x, y ; cin >> x >> y ;
adj[x].push_back(y) ;
adj[y].push_back(x) ;
}
FOR(i , 1 , n ) cin >> a[i] ;
}
void solve() {
ll ans = 0 ;
dfs(1 , 1 , ans ) ;
FOR(i , 1 , n ) adj[i].clear() ;
cout << ans << el ;
}
_ROOT_ {
// freopen(NAME".inp", "r", stdin);
// freopen(NAME".out", "w", stdout) ;
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1;// cin >> t ;
while(t--) {
init();
solve();
}
return (0&0);
}
Ly8gUk9PVCA6IERSQUdPTjMwMTIwMDkgOiBXQSBpbiBSZWFsIExpZmUKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRk9SKGksbCxyKSBmb3IoaW50IGkgPSBsIDsgaSA8PSByIDsgaSArKykKI2RlZmluZSBGT1JEKGkscixsKSBmb3IoaW50IGkgPSByIDsgaSA+PSBsIDsgaSAtLSkKI2RlZmluZSBSRVAoaSwgYSApIGZvcihpbnQgaSA9IDAgOyBpIDwgYSA7IGkgKysgKQojZGVmaW5lIGNvbXBhcmUodikgc29ydCgodikuYmVnaW4oKSwgKHYpLmVuZCgpKTsgKHYpLmVyYXNlKHVuaXF1ZSgodikuYmVnaW4oKSwgKHYpLmVuZCgpKSwgKHYpLmVuZCgpKTsKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBlbCAiXG4iCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBfUk9PVF8gaW50IG1haW4oKQojZGVmaW5lIE0gMTAwMDAwMDAwNwojZGVmaW5lIE1BWE4gMTAwMDAwMQojZGVmaW5lIEJpdChpKSAoMUxMIDw8IGkgKQojZGVmaW5lIElORiAoMWxsPDwzMCkKI2RlZmluZSBOQU1FICJmaWxlIgojZGVmaW5lIGRlYnVnKGEpIGNvdXQgPDwgI2EgPDwgIiA9ICIgPDwgYSA8PCBlbmRsOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbGwgbiwgbSwgcSA7CmxsIGFbTUFYTiBdIDsKbGwgc3pbTUFYTiBdIDsKdmVjdG9yPGxsPiBhZGpbTUFYTiBdIDsKCmxsIFBvd2VyKGxsIGEsIGxsIGIgKSB7IGxsIHJlcyA9IDE7IHdoaWxlKGIpeyBpZihiJjEpIHJlcyA9IGEqcmVzJU07IGI+Pj0xOyBhPWEqYSVNOyB9IHJldHVybiByZXM7IH0KbGwgYWRkKGxsIGEsIGxsIGIgKSB7IHJldHVybiBhICsgYiA+PSBNID8gYSArIGIgLSBNIDogYSArIGI7IH0KbGwgbXVsKGxsIGEsIGxsIGIgKSAgeyByZXR1cm4gMUxMICogKGElTSkgKiAoYiVNKSAlIE07IH0KbGwgc3ViKGxsIGEsIGxsIGIgKSB7IHJldHVybiBhIC0gYiA8IDAgPyBhIC0gYiArIE0gOiBhIC0gYjsgfQpsbCBkaXZpKGxsIGEsIGxsIGIpIHsgcmV0dXJuIDFMTCAqIGEgKiBQb3dlcihiLCBNIC0gMiApICUgTTsgfQoKYm9vbCBjaGVjayhsbCBhICkgewpsbCB0ID0gc3FydChhICkgOwpyZXR1cm4gdCAqIHQgPT0gYSA7Cn0KCnZvaWQgZGZzKGxsIHUgLCBsbCBwICxsbCAmYW5zICApIHsKICAgIHN6W3VdID0gMSA7CiAgICBmb3IobGwgdiA6IGFkalt1XSkgaWYodiAhPSBwICkgewogICAgICAgIGRmcyh2ICwgdSAsIGFucyApIDsKICAgICAgICBzelt1XSArPSBzelt2XSA7CiAgICB9CiAgICB2ZWN0b3I8bGw+IHZhbCA7CiAgICBpZihjaGVjayhhW3VdKSkgewogICAgICAgIGZvcihsbCB2IDogYWRqW3VdKSBpZih2ICE9IHAgKSB2YWwucHVzaF9iYWNrKHN6W3ZdKSA7CiAgICAgICAgdmFsLnB1c2hfYmFjayhuIC0gc3pbdV0pIDsKCiAgICAgICAgbGwgc3VtID0gMCAsIHBhaXJyID0gMCAsIHRyaXAgPSAwIDsKCiAgICAgICAgZm9yKGxsIHYgOiB2YWwgKSB7CiAgICAgICAgICAgIHRyaXAgPSBhZGQodHJpcCAsIG11bChwYWlyciAsIHYgKSkgOwogICAgICAgICAgICBwYWlyciA9IGFkZChwYWlyciAsIG11bChzdW0gLCB2ICkpIDsKICAgICAgICAgICAgc3VtID0gYWRkKHN1bSAsIHYgKSA7CiAgICAgICAgfQogICAgICAgIGFucyA9IGFkZChhbnMgLCBwYWlyciApIDsKICAgICAgICBhbnMgPSBhZGQoYW5zICwgdHJpcCApIDsKICAgIH0KfQoKdm9pZCBpbml0KCkgewogICAgY2luID4+IG4gOwogICAgRk9SKGkgLCAyICwgbiApIHsKICAgIGxsIHgsIHkgOyBjaW4gPj4geCA+PiB5IDsKICAgIGFkalt4XS5wdXNoX2JhY2soeSkgOwogICAgYWRqW3ldLnB1c2hfYmFjayh4KSA7CiAgICB9ICAgCiAgICBGT1IoaSAsIDEgLCBuICkgY2luID4+IGFbaV0gOwoKfQoKdm9pZCBzb2x2ZSgpIHsKICAgIGxsIGFucyA9IDAgOwogICAgZGZzKDEgLCAxICwgYW5zICkgOwogICAgRk9SKGkgLCAxICwgbiApIGFkaltpXS5jbGVhcigpIDsKICAgIGNvdXQgPDwgYW5zIDw8IGVsIDsKfQoKCl9ST09UXyB7Ci8vICAgIGZyZW9wZW4oTkFNRSIuaW5wIiwgInIiLCBzdGRpbik7Ci8vICAgIGZyZW9wZW4oTkFNRSIub3V0IiwgInciLCBzdGRvdXQpIDsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CiAgICBpbnQgdCA9IDE7Ly8gY2luID4+IHQgOwogICAgd2hpbGUodC0tKSB7CiAgICAgICAgaW5pdCgpOwogICAgICAgIHNvbHZlKCk7CiAgICB9CiAgICByZXR1cm4gKDAmMCk7Cn0K