#include <bits/stdc++.h>
using namespace std;
const int maxn = 200111;
vector<int> g[maxn];
int n, d[maxn], down[maxn], up[maxn], fa[maxn];
char s[maxn];
void dfs(int x, int f) {
  down[x] = 0;
  fa[x] = f;
  for (int i = 0; i < (int)g[x].size(); i++)
    if (g[x][i] != f) {
      dfs(g[x][i], x);
      down[x] = max(down[x], down[g[x][i]] + 1);
    }
}
void dfs2(int x) {
  int mx = up[x] + 1, mx2;
  for (int i = 0; i < (int)g[x].size(); i++)
    if (g[x][i] != fa[x]) {
      up[g[x][i]] = mx;
      mx = max(mx, down[g[x][i]] + 2);
    }
  mx = 0;
  for (int i = (int)g[x].size() - 1; i >= 0; i--)
    if (g[x][i] != fa[x]) {
      up[g[x][i]] = max(up[g[x][i]], mx);
      mx = max(mx, down[g[x][i]] + 2);
      dfs2(g[x][i]);
    }
  mx = mx2 = 0;
  for (int i = 0; i < (int)g[x].size(); i++) {
    int cur;
    if (g[x][i] == fa[x])
      cur = up[x];
    else
      cur = down[g[x][i]] + 1;
    if (cur > mx) {
      mx2 = mx;
      mx = cur;
    } else if (cur > mx2)
      mx2 = cur;
  }
  d[x] = min(mx - 1, mx2 + 1);
}
int main() {
  scanf("%d", &n);
  for (int i = 1, u, v; i < n; i++) {
    scanf("%d%d", &u, &v);
    g[u].push_back(v);
    g[v].push_back(u);
  }
  scanf("%s", s + 1);
  dfs(1, 0);
  dfs2(1);
  long long ans = 1;
  for (int i = 1; i <= n; i++) ans += d[i] + 1;
  printf("%lld\n", ans);
  return 0;
}
