#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)
{//cerr<<s<<' '<<d<<endl;
	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);//cerr<<min(cimx+1,mx-1)-l+1<<endl;
	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);
	}
	scanf("\n%s",st+1);
	prework(1);
	dfs(1);
	printf("%lld\n",ans+1);
}	
	
	