#include <bits/stdc++.h>
#define pii pair<int,int>
#define ll long long
using namespace std;
const int MAX=1e5+5;
const int INF=1<<30;
int N;
vector<int> adj[MAX];
bool A[MAX];
ll dp[MAX][2][2];
void dfs(int x,int p){
for (auto y:adj[x]) if (y!=p) dfs(y,x);
for (int a=0;a<2;a++) for (int b=0;b<2;b++){
ll t=a;
vector<ll> V;
for (auto y:adj[x]){
if (y==p) continue;
t+=dp[y][0][a^A[y]];
V.push_back(dp[y][1][a^A[y]]-dp[y][0][a^A[y]]);
}
sort(V.begin(),V.end());
dp[x][a][b]=INF;
int c=b^a;
if (c==0) dp[x][a][b]=min(dp[x][a][b],t);
for (auto v:V){
c^=1;
t+=v;
if (c==0) dp[x][a][b]=min(dp[x][a][b],t);
}
dp[x][a][b]=min(dp[x][a][b],(ll)INF);
}
}
int main(){
cin>>N;
for (int i=0;i<N-1;i++){
int a,b;cin>>a>>b;a--,b--;
adj[a].push_back(b),adj[b].push_back(a);
}
for (int i=0;i<N;i++) cin>>A[i];
dfs(0,-1);
ll ans=min(dp[0][0][A[0]],dp[0][1][A[0]]);
if (ans>=INF) cout<<"impossible\n";
else cout<<ans<<'\n';
}