#include<bits/stdc++.h>usingnamespacestd;constintwhite=0,black=1;classTree{public:intn;vector<vector<int>>adj;vector<longlong>cnt;vector<int>a;// cnt[u] is the number of downward paths starting at u when only the
// last vertex in the path has black color.
Tree(intn){this->n=n;adj.resize(n);cnt.resize(n);a.resize(n);}voiddfs(intu,intpar){cnt[u]=(a[u]==black);for(autochild:adj[u]){if(child==par){continue;}dfs(child,u);if(a[u]==white){cnt[u]+=cnt[child];}}}};voidsolve(){intn;cin>>n;Treet(n);for(inti=0;i<n;i++){cin>>t.a[i];}for(inti=0;i<n-1;i++){intx,y;cin>>x>>y;x--;y--;t.adj[x].push_back(y);t.adj[y].push_back(x);}longlongres=0;t.dfs(0,-1);for(inti=0;i<n;i++){res+=t.cnt[i];cout<<t.cnt[i]<<" ";}cout<<endl;cout<<res<<endl;}intmain(){intt;cin>>t;for(inti=0;i<t;i++){solve();}return0;}