#include <bits/stdc++.h>

const int MAXN = 2010;
int head[MAXN], nxt[MAXN << 1], to[MAXN << 1], tot;
void addedge(int b, int e) {
	nxt[++tot] = head[b]; to[head[b] = tot] = e;
	nxt[++tot] = head[e]; to[head[e] = tot] = b;
}
int dp[MAXN], d2[MAXN], sz[MAXN], n;
char buf[MAXN];
void dfs(int u, int fa = 0, int dep = 0) {
	int ma = 0, mt = 0;
	sz[u] = buf[u] & 1;
	d2[u] = 0;
	for (int i = head[u]; i; i = nxt[i])
		if (to[i] != fa) {
			dfs(to[i], u, dep + 1);
			sz[u] += sz[to[i]];
			dp[to[i]] += sz[to[i]];
			d2[to[i]] += sz[to[i]];
			d2[u] += d2[to[i]];
			if (dp[to[i]] > ma) ma = dp[to[i]], mt = d2[to[i]];
			if (dp[to[i]] == ma) mt = std::min(mt, d2[to[i]]);
		}
	if (ma <= d2[u] - mt) dp[u] = d2[u] & 1;
	else dp[u] = ma + mt - d2[u];
}
int main() {
	std::ios_base::sync_with_stdio(false), std::cin.tie(0);
	std::cin >> n >> buf + 1;
	for (int i = 1, t1, t2; i < n; ++i) {
		std::cin >> t1 >> t2;
		addedge(t1, t2);
	}
	int ans = 0x3f3f3f3f;
	for (int i = 1; i <= n; ++i)
		dfs(i), dp[i] || (ans = std::min(ans, d2[i]));
	std::cout << (ans == 0x3f3f3f3f ? -2 : ans) / 2 << std::endl;
	return 0;
}
