#include<bits/stdc++.h>
using namespace std;
#define N 1111116
#define next nxt
 
int n,x[N],y[N],next[N],p[N],f[N],size[N],d[N];
long long ans;
char s[N];
 
void travel(int x){
	size[x]=(s[x]=='1');
	for (int t=p[x];t;t=next[t])
		if (y[t]!=f[x]){
			f[y[t]]=x;travel(y[t]);
			size[x]+=size[y[t]];
			d[x]=max(d[x],d[y[t]]+1);
		}
}
 
void solve(int x,int mx){
	int mn=(s[x]=='0')<<30,nx=0;
	if (size[x]!=size[1]) mn=min(mn,mx);
	for (int t=p[x];t;t=next[t])
		if (y[t]!=f[x]){
			nx=max(nx,d[y[t]]+1);
			if (nx>mx) swap(nx,mx);
			if (size[y[t]]) mn=min(mn,d[y[t]]+1);
		}
	ans+=max(min(mx-1,nx+1)-mn+1,0);
	for (int t=p[x];t;t=next[t])
		if (y[t]!=f[x])
		solve(y[t],(d[y[t]]+1!=mx)?(mx+1):(nx+1));
}
 
int read(){
	int x=0,f=1;char ch=getchar();
	for (;!isdigit(ch);ch=getchar()) if (ch=='-')  f=-f;
	for (;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
	return x*f;
}
 
int main(){
	n=read();
	for (int i=1;i<=n-1;i++){
		x[2*i-1]=y[2*i]=read();
		y[2*i-1]=x[2*i]=read();
		next[2*i-1]=p[x[2*i-1]];p[x[2*i-1]]=2*i-1;
		next[2*i]=p[x[2*i]];p[x[2*i]]=2*i;
	}
	scanf(" %s",s+1);
	travel(1);solve(1,0);
	printf("%lld\n",ans+1);
	return 0;
}