#include <bits/stdc++.h>
using namespace std;
#define MAXN 21
#define int long long
int n;
vector<int> adj[MAXN];
int state[MAXN];
int deg[MAXN];
int32_t main()
{
cin>>n;for (int i=1;i<n;i++) {int u,v;cin>>u>>v;adj[u].push_back(v);adj[v].push_back(u);}
for (int node=1;node<=n;node++) cin>>state[node];
int answer=n+1;
for (int maska=0;maska<(1<<n);maska++)
{
for (int node=1;node<=n;node++)
{
if (!(maska&(1<<(node-1)))) continue;
deg[node]++;for (int sled:adj[node]) deg[sled]++;
}
bool valid=true;
for (int node=1;node<=n;node++)
{
if (deg[node]%2!=state[node]) {valid=false;break;}
}
if (valid) answer=min(answer,(long long)__builtin_popcount(maska));
for (int node=1;node<=n;node++) deg[node]=0;
}
if (answer==n+1) cout<<"impossible"<<endl;
else cout<<answer<<endl;
}