#include<bits/stdc++.h>
#define MN 2000
using namespace std;
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
int n,cnt,ans=1e9,head[MN+5],f[MN+5],g[MN+5],mx[MN+5],from[MN+5];
char s[MN+5];
struct edge{int to,next;}e[MN*2+5];
inline void ins(int f,int t)
{
    e[++cnt]=(edge){t,head[f]};head[f]=cnt;
    e[++cnt]=(edge){f,head[t]};head[t]=cnt;
}
void dfs(int x,int fa)
{
    f[x]=0;g[x]=s[x]=='1';mx[x]=0;from[x]=0;
    for(int i=head[x];i;i=e[i].next)
        if(e[i].to!=fa)
        {
            dfs(e[i].to,x);
            int v=f[e[i].to]+g[e[i].to];f[x]+=v;
            g[x]+=g[e[i].to];
            if(v>mx[x]) mx[x]=v,from[x]=e[i].to;
        }
}
bool Solve(int x,int y)
{
    if(!x||y*2>f[x]) return false;
    if(y<=f[x]-mx[x]) return true;
    return Solve(from[x],y-(f[x]-mx[x]));
}
int main()
{
    n=read();scanf("%s",s+1);
    for(int i=1;i<n;++i) ins(read(),read());
    for(int i=1;i<=n;++i)
    {
        dfs(i,0);if(f[i]/2>=ans||(f[i]&1)) continue;
        if(Solve(i,f[i]/2)) ans=f[i]/2;
    }
    cout<<(ans>100000000?-1:ans);
	return 0;
}