#include <bits/stdc++.h>
const int MN = 200005;
int N, a[MN];
std::vector<int> G[MN];
int par[MN], len[MN], gl[MN];
void DFS0(int u, int p) {
  par[u] = p;
  for (int v : G[u])
    if (v != p) {
      DFS0(v, u);
      len[u] = std::max(len[u], len[v] + 1);
    }
}
void DFS1(int u, int p) {
  static int pre[MN], suf[MN];
  int t = 0;
  for (int v : G[u])
    if (v != p) ++t, pre[t] = suf[t] = len[v] + 1;
  pre[0] = suf[t + 1] = gl[u] + 1;
  for (int i = 1; i <= t; ++i) pre[i] = std::max(pre[i], pre[i - 1]);
  for (int i = t; i >= 1; --i) suf[i] = std::max(suf[i], suf[i + 1]);
  t = 0;
  for (int v : G[u])
    if (v != p) ++t, gl[v] = std::max(pre[t - 1], suf[t + 1]);
  for (int v : G[u])
    if (v != p) DFS1(v, u);
}
int lower[MN], upper[MN];
int main() {
  scanf("%d", &N);
  for (int i = 1, x, y; i < N; ++i) {
    scanf("%d%d", &x, &y);
    G[x].push_back(y);
    G[y].push_back(x);
  }
  for (int i = 1; i <= N; ++i) scanf("%1d", &a[i]);
  DFS0(1, 0), gl[1] = -1, DFS1(1, 0);
  for (int i = 1; i <= N; ++i) {
    int x = gl[i], y = -1;
    for (int v : G[i])
      if (v != par[i]) {
        if (len[v] > y) y = len[v];
        if (y > x) std::swap(x, y);
      }
    upper[i] = std::min(x, y + 2);
  }
  long long Ans = 1;
  for (int i = 1; i <= N; ++i) Ans += upper[i] + 1;
  printf("%lld\n", Ans);
  return 0;
}
