#include<bits/stdc++.h>
using namespace std;

int n,mn[2010],mx[2010],siz[2010];
vector<int> v[2010];
char s[2010];

void dfs(int np,int fath)
{
	siz[np]=(s[np]=='1');
	mx[np]=mn[np]=0;
	pair<int,int> m=make_pair(0,0);
	for(int &x:v[np])
	{
		if(x==fath)continue;
		dfs(x,np);
		siz[np]+=siz[x];
		mx[np]+=mx[x];
		m=max(m,make_pair(mn[x],mx[x]));
	}
	mn[np]=max(0,m.first-(mx[np]-m.second));
	if(fath)mn[np]+=siz[np],mx[np]+=siz[np];
}

int main()
{
	scanf("%d%s",&n,s+1);
	for(int i=1,ti,tj;i<n;i++)
	{
		scanf("%d%d",&ti,&tj);
		v[ti].push_back(tj);
		v[tj].push_back(ti);
	}
	int ans=0x3f3f3f3f;
	for(int i=1;i<=n;i++)
	{
		dfs(i,0);
		if(mx[i]&1)continue;
		if(mn[i]==0)
		{
			ans=min(ans,mx[i]/2);
		}
	}
	if(ans!=0x3f3f3f3f)printf("%d\n",ans);
	else puts("-1");
	return 0;
}
