#include <bits/stdc++.h>
#define meow(args...) fprintf(stderr, args)
template<class T1, class T2> inline bool cmin(T1 &a, const T2 &b) {return b<a?(a=b, true):false;}
template<class T1, class T2> inline bool cmax(T1 &a, const T2 &b) {return a<b?(a=b, true):false;}
template<class Type> Type read() {
	Type a;
	bool b;
	unsigned char c;
	while(c=getchar()-48, (c>9)&(c!=253));
	for(a=(b=c==253)?0:c; (c=getchar()-48)<=9; a=a*10+c);
	return b?-a:a;
}
auto rd=read<int>;
const int N=2005;
int n, size[N];
char s[N];
long long f[N], g[N];
std::vector<int> e[N];
void dfs(int u, int fa) {
	size[u]=s[u]-'0';
	f[u]=g[u]=0;
	for(int v: e[u])
		if(v!=fa) {
			dfs(v, u);
			if(g[v]+size[v]<=f[u]) f[u]-=g[v]+size[v];
			else if(g[u]<=f[v]+size[v]) f[u]=f[v]+size[v]-g[u];
			else f[u]=(g[u]+g[v]+size[v])%2;
			g[u]+=g[v]+size[v];
			size[u]+=size[v];
		}
}
int main() {
	long long ans=-1;
	assert(scanf("%d%s", &n, s+1)==2);
	for(int i=1; i<n; ++i) {
		int a=rd(), b=rd();
		e[a].push_back(b);
		e[b].push_back(a);
	}
	for(int i=1; i<=n; ++i) {
		dfs(i, 0);
		if(f[i]==0&&(g[i]/2<ans||ans==-1)) ans=g[i]/2;
	}
	printf("%lld\n", ans);
	return 0;
}
