#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct Edge
{
	int to;
	int nxt;
}e[4005];
int n,m,edgenum,head[2005],pa[2005],f[2005],g[2005],size[2005];
char s[2005];
void add(int u,int v)
{
	e[++edgenum].to=v;
	e[edgenum].nxt=head[u];
	head[u]=edgenum;
}
void dfs(int node)
{
	f[node]=g[node]=size[node]=0;
	for(int hd=head[node];hd;hd=e[hd].nxt)
	{
		int to=e[hd].to;
		if(to==pa[node])continue;
		pa[to]=node;
		dfs(to);
		size[node]+=size[to];
		g[node]+=g[to];
	}
	g[node]+=size[node];
	if(s[node]=='1')size[node]++;
	int s1=0,minp=0;
	for(int hd=head[node];hd;hd=e[hd].nxt)
	{
		int to=e[hd].to;
		if(to==pa[node])continue;
		s1+=g[to]+size[to];
		if(f[to]+size[to]>f[minp]+size[minp])minp=to;
	}
	s1-=g[minp]+size[minp];
	if(s1>=f[minp]+size[minp])f[node]=(s1-f[minp]-size[minp])&1;
	else f[node]=f[minp]+size[minp]-s1;
	pa[node]=0;
}
int main()
{
	scanf("%d",&n);
	scanf("%s",s+1);
	for(int i=1;i<n;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		add(u,v);
		add(v,u);
	}
	int ans=2147483647;
	for(int i=1;i<=n;i++)
	{
		dfs(i);
		if(f[i]==0)ans=min(ans,g[i]);
	}
	if(ans&1)printf("-1\n");
	else printf("%d\n",ans/2);
	return 0;
}