#include <bits/stdc++.h>
const int N = 2e5 + 7;
long long ans = 1;
int n;
char s[N];
std::vector<int> e[N];
int d1[N], d2[N], d3[N], dw[N], fa[N], d4[N], q[N], ql = 0, qr = 0;
int min(int a, int b) { return a < b ? a : b; }
int max(int a, int b) { return a > b ? a : b; }
void f1(int w, int pa) {
  d2[w] = -N;
  fa[w] = pa;
  for (unsigned i = 0; i < e[w].size(); ++i) {
    int u = e[w][i];
    if (u == pa) continue;
    f1(u, w);
    int d = d1[u] + 1;
    if (d >= d1[w])
      d2[w] = d1[w], d1[w] = d, dw[w] = u;
    else if (d > d2[w])
      d2[w] = d;
  }
}
void f2(int w) {
  for (unsigned i = 0; i < e[w].size(); ++i) {
    int u = e[w][i];
    if (u == fa[w]) continue;
    d3[u] = max(dw[w] == u ? d2[w] : d1[w], d3[w]) + 1;
    f2(u);
  }
}
void chk(int w) {
  int mx = d1[w], se = d2[w], mw = dw[w], d = d3[w];
  if (d >= mx)
    se = mx, mx = d, mw = fa[w];
  else if (d > se)
    se = d;
  int c = min(mx - 1, se + 1);
  if (s[w] == '1') {
    ans += c + 1;
    if (mw && s[mw] != '1') d4[mw] = min(d4[mw], se + 1);
  } else {
    ans += max(0, c - d4[w] + 1);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1, a, b; i < n; ++i) {
    scanf("%d%d", &a, &b);
    e[a].push_back(b);
    e[b].push_back(a);
  }
  scanf("%s", s + 1);
  f1(1, 0);
  f2(1);
  for (int i = 1; i <= n; ++i) d4[i] = N;
  for (int i = 1; i <= n; ++i)
    if (s[i] == '1') chk(i);
  for (int i = 1; i <= n; ++i)
    if (d4[i] < N) q[++qr] = i;
  while (ql != qr) {
    int w = q[++ql];
    for (unsigned i = 0; i < e[w].size(); ++i) {
      int u = e[w][i];
      if (s[u] != '1' && d4[u] == N) d4[q[++qr] = u] = d4[w] + 1;
    }
  }
  for (int i = 1; i <= n; ++i)
    if (s[i] != '1') chk(i);
  printf("%lld\n", ans);
  return 0;
}
