/****************************************************************
*	Author: huhao
*	Email: 826538400@qq.com
*	Create time: 2020-03-29 14:12:17
****************************************************************/
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#define fr(i,a,b) for(int i=(a),end_##i=(b);i<=end_##i;i++)
#define fd(i,a,b) for(int i=(a),end_##i=(b);i>=end_##i;i--)
int read()
{
	int r=0,t=1,c=getchar();
	while(c<'0'||c>'9')
	{
		t=c=='-'?-1:1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		r=(r<<3)+(r<<1)+(c^48);
		c=getchar();
	}
	return r*t;
}
#include<vector>
//                    123456789
const int N=2010,inf=1000000000;
int n,w[N],Min[N],Max[N],ans;
std::vector<int> e[N];
char s[N];
void solve(int u,int f)
{
	w[u]=s[u]; Max[u]=0;
	for(auto v:e[u]) if(v!=f) solve(v,u);
	for(auto v:e[u]) if(v!=f){ w[u]+=w[v]; Max[u]+=Max[v]+w[v]; }
	Min[u]=Max[u]&1;
	for(auto v:e[u]) if(v!=f) Min[u]=std::max(Min[u],Min[v]+w[v]-(Max[u]-Max[v]-w[v]));
}
int main()
{
	n=read(); scanf("%s",s+1);
	fr(i,1,n) s[i]-=48;
	fr(i,1,n-1)
	{
		int u=read(),v=read();
		e[u].push_back(v); e[v].push_back(u);
	}
	ans=inf;
	fr(i,1,n)
	{
		solve(i,0);
		if(Min[i]==0) ans=std::min(ans,Max[i]/2);
	}
	printf("%d\n",ans==inf?-1:ans);
	return 0;
}