#include <bits/stdc++.h>
using namespace std;
#define finish(x) return cout << x << endl, 0
#define ll long long

const int N = 2001;

int n;
string s;
vector <int> v[N];
vector <ll> cnt, low, high;

void dfs(int node, int pnode){
	cnt[node] = s[node] == '1';
	for(auto &i : v[node]){
		if(i == pnode) continue;
		dfs(i, node);
		cnt[node] += cnt[i];
		high[node] += high[i] + cnt[i];
	}
	low[node] = high[node];
	ll mx = 0;
	for(auto &i : v[node]){
		if(i == pnode) continue;
		mx = max(mx, low[i] + cnt[i]);
	}
	ll sum = 0;
	for(auto &i : v[node]){
		if(i == pnode) continue;
		int cur = min(mx, high[i] + cnt[i]);
		if(cur % 2 != (high[i] + cnt[i]) % 2) cur--;
		sum += cur;
	}
	low[node] = max(sum % 2, 2 * mx - sum);
}
int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> s;
	s = ';' + s;
	for(int i = 0 ; i < n - 1 ; i++){
		int x, y;
		cin >> x >> y;
		v[x].push_back(y);
		v[y].push_back(x);
	}
	ll ans = 1e18;
	for(int i = 1 ; i <= n ; i++){
		cnt.assign(n + 1, 0);
		low.assign(n + 1, 0);
		high.assign(n + 1, 0);
		dfs(i, 0);
		if(low[i] == 0) ans = min(ans, high[i] / 2);
	}
	if(ans == 1e18) ans = -1;
	cout << ans << endl;
}
