#include <bits/stdc++.h>
using namespace std;
const int N = 300000;
long long ans;
int n;
vector<int> bi[N];
char s[N];
int mxl[N], m2l[N];
void dfs1(int t, int f) {
  for (int i = 0; i < bi[t].size(); ++i)
    if (bi[t][i] != f) {
      dfs1(bi[t][i], t);
      if (mxl[bi[t][i]] + 1 >= mxl[t])
        m2l[t] = mxl[t], mxl[t] = mxl[bi[t][i]] + 1;
      else if (mxl[bi[t][i]] + 1 >= m2l[t])
        m2l[t] = mxl[bi[t][i]] + 1;
    }
}
void dfs2(int t, int f, int w) {
  int nmx = mxl[t], nm2 = m2l[t];
  if (w >= nmx)
    nm2 = nmx, nmx = w;
  else if (w >= nm2)
    nm2 = w;
  ans += nmx + 1;
  ans -= max(1, nmx - nm2 - 1);
  for (int i = 0; i < bi[t].size(); ++i)
    if (bi[t][i] != f)
      dfs2(bi[t][i], t,
           max(w, mxl[t] == mxl[bi[t][i]] + 1 ? m2l[t] : mxl[t]) + 1);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; ++i) {
    int a, b;
    scanf("%d%d", &a, &b);
    bi[a].push_back(b);
    bi[b].push_back(a);
  }
  scanf("%s", s + 1);
  ans = 1;
  dfs1(1, 1);
  dfs2(1, 1, 0);
  printf("%lld\n", ans);
}
