#include #include #include #include using namespace std; typedef long long LL; const int N = 200010, MOD = 1000000007; int n, r[N], fa[N], dep[N]; LL ans; vector g[N], fs[N]; int Find(int x) { return fa[x] ? fa[x] = Find(fa[x]) : x; } int main() { scanf("%d", &n); for (int i = 1; i <= n; ++i) scanf("%d", &r[i]); for (int i = 1, u, v; i < n; ++i) { scanf("%d%d", &u, &v); g[u].push_back(v); g[v].push_back(u); } for (int v = 1; v <= n; ++v) { for (int u : g[v]) { if (u < v) { int ru = Find(u); fs[v].push_back(ru); fa[ru] = v; } } } queue q; q.push(n); while (!q.empty()) { int u = q.front(); q.pop(); for (int w : fs[u]) { dep[w] = dep[u] + 1; q.push(w); } } ans = 1; for (int i = 1; i <= n; ++i) { ans = ans * ((r[i] + dep[i] + 1) % MOD) % MOD; } printf("%lld\n", ans); return 0; }