#include <bits/stdc++.h>
using namespace std;

const int MAXN = 2020;
int nodeDep[MAXN];
int _size[MAXN];
long long all[MAXN];
long long dp[MAXN];
vector <int> adj[MAXN];
char A[MAXN];
long long ans = -1;
int n;

void getAns(int u, int fa) {
	int maxSon = -1;
	_size[u] = A[u] - '0',
	all[u] = 0;
	
	for (int v : adj[u]) {
		if (v == fa)
			continue;
		getAns(v, u),
		_size[u] += _size[v];
		all[u] += (all[v] += _size[v]);
		if (!~maxSon || all[maxSon] < all[v])
			maxSon = v;
	}
	
	if (!~maxSon)
		return void(dp[u] = 0);
	if (all[u] >= (all[maxSon]<<1))
		dp[u] = all[u] >> 1;
	else
		dp[u] = all[u] - all[maxSon] + (min((all[maxSon]<<1) - all[u], dp[maxSon] << 1) >> 1);
}

int main(void) {
	ios::sync_with_stdio(0), cin.tie(NULL), cout.tie(NULL);
	
	cin >> n;
	cin >> (A + 1);
	for (int i = 1, u = 0, v = 0;i < n; ++i) {
		cin >> u >> v;
		adj[u].push_back(v), adj[v].push_back(u);
	}
	
	for (int i = 1;i <= n; ++i) {
		getAns(i, 0);
		if (dp[i] * 2 == all[i])
			ans = (!~ans || ans > dp[i]) ? dp[i] : ans;
	}
	
	cout << ans << '\n';
	return 0;
}