#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define REP(i,n) for(int i=(0);i<(n);i++)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
using namespace std;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef long long ll;

const int N=2005,inf=1e9+99;
int flag[N],sz[N],sum[N];
int n,a,b,ans=inf;
char s[N];
vi e[N];

void dfs1(int u,int fa){
	sum[u]=sz[u]=0;
	for(auto v:e[u])
		if(v!=fa){
			dfs1(v,u);
			sz[u]+=sz[v];
			sum[u]+=sum[v]+sz[v];
		}
	sz[u]+=flag[u];
}

int dfs2(int u,int fa){
	if(sum[u]<=1)return sum[u];
	int k=0,mx=0;
	for(auto v:e[u])
		if(v!=fa&&sum[v]+sz[v]>mx)
			k=v,mx=sum[v]+sz[v];
	if(mx*2>sum[u]){
		int rem=sum[u]-mx;
		int ret=dfs2(k,u)+sz[k];
		if(ret<=rem)return sum[u]&1;
		return ret-rem;
	}
	return sum[u]&1;
}

int main(){
	scanf("%d",&n);
	scanf("%s",s+1);
	rep(i,1,n-1){
		int a,b;
		scanf("%d%d",&a,&b);
		e[a].pb(b),e[b].pb(a);
	}
	rep(i,1,n)flag[i]=s[i]-'0';
	rep(i,1,n){
		dfs1(i,0);
		if(!dfs2(i,0))
			ans=min(ans,sum[i]/2);
	}
	if(ans>=inf)puts("-1");
	else cout<<ans<<endl;
	return 0;
}