#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, n) for(int i = 0; i < (n); i++)
#define rep1(i, n) for(int i = 1; i <= (n); i++)
#define co(x) cout << (x) << "\n"
#define cosp(x) cout << (x) << " "
#define ce(x) cerr << (x) << "\n"
#define cesp(x) cerr << (x) << " "
#define pb push_back
#define mp make_pair
#define Would
#define you
#define please

string S;
int D[2001], P[2001], n[2001], press[2001];
vector<int> E[2001];
void dfs(int A) {
	if (D[A] == 0) {
		D[A] = 1;
		int ret1 = 0;
		int ret2 = 0;
		int ret3 = 0;
		int saidai = 0;
		for (int i : E[A]) {
			dfs(i);
			ret1 += P[i] + n[i];
			ret2 += n[i];
			saidai = max(saidai, 2 * (P[i] + n[i]) - 2 * press[i]);
		}
		if (saidai - ret1 < 0) ret3 = ret1 / 2;
		else ret3 = ret1 - saidai / 2;
		if (S[A - 1] == '1') ret2++;
		
		P[A] = ret1;
		n[A] = ret2;
		press[A] = ret3;
	}
}

int main() {
	cin.tie(0);
	ios::sync_with_stdio(false);


	int N;
	cin >> N;
	cin >> S;

	rep(i, N - 1) {
		int a, b;
		cin >> a >> b;
		E[a].pb(b);
		E[b].pb(a);
	}

	bool OK = 0;
	int saishou = 1e9;
	rep1(i, N) {
		rep1(j, N) {
			D[j] = 0;
			P[j] = 0;
			n[j] = 0;
			press[j] = 0;
		}
		dfs(i);

		if (P[i] == press[i] * 2) {
			OK = 1;
			saishou = min(saishou, press[i]);
		}
	}

	if (OK) co(saishou);
	else co(-1);

	Would you please return 0;
}