#include <bits/stdc++.h>
using namespace std;
const int N = (int)(2e5 + 5);
int n, a, b;
long long sum, e[N], o[N], w[N];
vector<int> v[N];
bool u[N];
long long mult(long long a, long long b) {
  return (a * b + 1000000007) % 1000000007;
}
long long add(long long a, long long b) {
  return (a + b + 1000000007) % 1000000007;
}
void dfs(int x) {
  o[x] = 1;
  for (int y : v[x])
    if (!o[y]) {
      dfs(y);
      o[x] = add(o[x], e[y]);
      e[x] = add(e[x], o[y]);
    }
}
void dfs2(int x, int z) {
  u[x] = true;
  sum = add(sum, mult(w[x], o[x]));
  for (int y : v[x])
    if (!u[y]) {
      sum = add(sum, add(mult(add(w[x], -w[y]), mult(e[y], o[x] - e[y])),
                         mult(add(-w[x], w[y]), mult(o[y], e[x] - o[y]))));
      o[y] = e[x];
      e[y] = o[x];
      dfs2(y, x);
    }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie();
  cin >> n;
  for (int i = 0; i < n; i++) cin >> w[i];
  for (int i = 0; i < n - 1; i++) {
    cin >> a >> b, --a, --b;
    v[a].push_back(b), v[b].push_back(a);
  }
  dfs(0);
  dfs2(0, -1);
  cout << sum << endl;
  return 0;
}
