#include <bits/stdc++.h>
using namespace std;
vector<int> des[1000100];
int size[1000100], md[1000100];
long long ans;
char st[1000100];
void prework(int s, int pre = 0) {
  if (st[s] == '1') size[s]++;
  for (int k = 0; k < des[s].size(); k++)
    if (des[s][k] != pre) {
      prework(des[s][k], s);
      size[s] += size[des[s][k]];
      md[s] = max(md[s], md[des[s][k]] + 1);
    }
}
void dfs(int s, int pre = 0, int d = 0) {
  int l = (st[s] == '0') * 2100000000, mx = d, cimx = 0;
  if (size[s] != size[1]) l = min(l, d);
  for (int k = 0; k < des[s].size(); k++)
    if (des[s][k] != pre) {
      cimx = max(cimx, md[des[s][k]] + 1);
      if (cimx > mx) swap(cimx, mx);
      if (size[des[s][k]]) l = min(l, md[des[s][k]] + 1);
    }
  ans += max(0, min(cimx + 1, mx - 1) - l + 1);
  for (int k = 0; k < des[s].size(); k++)
    if (des[s][k] != pre)
      dfs(des[s][k], s, (md[des[s][k]] + 1 != mx) ? mx + 1 : cimx + 1);
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    des[u].push_back(v);
    des[v].push_back(u);
  }
  prework(1);
  scanf("%s", st + 1);
  dfs(1);
  printf("%d\n", ans + 1);
}
