#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int m=n-1;
vector<vector<int>>graph(n);
int i=1;
while(i<=m){
int x,y;
cin>>x>>y;
x--,y--;
graph[x].push_back(y);
graph[y].push_back(x);
i++;
}
vector<int>value(n);
for(int i=0;i<n;i++){
cin>>value[i];
}
int source=0;
vector<bool>visited(n,false);
visited[source]=true;
queue<int>q;
q.push(source);
vector<int>ones(n);
ones[0]=value[0];
while(!q.empty()){
int parent=q.front();
q.pop();
for(auto it:graph[parent]){
if(!visited[it]){
visited[it]=true;
q.push(it);
if(value[it]==1){
ones[it]=ones[parent]+1;
}
else{
ones[it]=ones[parent];
}
}
}
}
for(int i=0;i<n;i++){
cout<<"Node"<<i+1<<" : "<<ones[i]<<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCl7CglpbnQgbjsKCWNpbj4+bjsKCQoJaW50IG09bi0xOwoJdmVjdG9yPHZlY3RvcjxpbnQ+PmdyYXBoKG4pOwoJaW50IGk9MTsKCXdoaWxlKGk8PW0pewoJCWludCB4LHk7CgkJY2luPj54Pj55OwoJCXgtLSx5LS07CgkJCgkJZ3JhcGhbeF0ucHVzaF9iYWNrKHkpOwoJCWdyYXBoW3ldLnB1c2hfYmFjayh4KTsKCQlpKys7Cgl9CgkKCQoJdmVjdG9yPGludD52YWx1ZShuKTsKCWZvcihpbnQgaT0wO2k8bjtpKyspewoJCWNpbj4+dmFsdWVbaV07Cgl9CgkKCQoJaW50IHNvdXJjZT0wOwoJdmVjdG9yPGJvb2w+dmlzaXRlZChuLGZhbHNlKTsKCXZpc2l0ZWRbc291cmNlXT10cnVlOwoJCglxdWV1ZTxpbnQ+cTsKCXEucHVzaChzb3VyY2UpOwoJCgl2ZWN0b3I8aW50Pm9uZXMobik7CgkKCW9uZXNbMF09dmFsdWVbMF07CgkKCXdoaWxlKCFxLmVtcHR5KCkpewoJCWludCBwYXJlbnQ9cS5mcm9udCgpOwoJCXEucG9wKCk7CgkJCgkJZm9yKGF1dG8gaXQ6Z3JhcGhbcGFyZW50XSl7CgkJCWlmKCF2aXNpdGVkW2l0XSl7CgkJCQl2aXNpdGVkW2l0XT10cnVlOwoJCQkJcS5wdXNoKGl0KTsKCQkJCQoJCQkJaWYodmFsdWVbaXRdPT0xKXsKCQkJCQlvbmVzW2l0XT1vbmVzW3BhcmVudF0rMTsKCQkJCX0KCQkJCWVsc2V7CgkJCQkJb25lc1tpdF09b25lc1twYXJlbnRdOwoJCQkJfQoJCQl9CgkJfQoJfQoJCgkKCWZvcihpbnQgaT0wO2k8bjtpKyspewoJCWNvdXQ8PCJOb2RlIjw8aSsxPDwiIDogIjw8b25lc1tpXTw8ZW5kbDsKCX0KCXJldHVybiAwOwp9