#include using namespace std; #define rep(i,n) for(int i=0; i<(n); ++i) #define st first #define nd second #define pb push_back #define mp make_pair typedef vector vi; typedef pair pii; typedef long long ll; const int maxn = 3*100 * 1000 + 5; const int M = 20; int mask[maxn][M]; int t[maxn]; vi adj[maxn]; int n; ll res; void dfsA(int u, int p){ rep(i,adj[u].size()){ int v=adj[u][i]; if(v==p) continue; dfsA(v,u); int m = t[u]&t[v]; rep(j,M) if(m&(1<>n; rep(i,n) cin>>t[i]; rep(i,n-1){ int a, b; cin>>a>>b; adj[a].pb(b); adj[b].pb(a); } dfsA(0,-1); cout<