#include <bits/stdc++.h>
using namespace std;
void dfs(int node, vector<vector<int>> adj, int used[], int parent[], vector<int> &dp, vector<int> &d, int val[]) {
used[node] = 1;
for (auto v: adj[node]) {
if (!used[v]) {
parent[v] = node;
d[v] = d[node] + 1;
dfs(v, adj, used, parent, dp, d, val);
}
}
dp[node] = val[node] ^ d[node];
int sum = 0;
for (auto v: adj[node]) {
if (v != parent[node]) {
sum += dp[v];
}
}
dp[node] += sum;
}
int main() {
int n;
cin >> n;
vector<vector<int>> adj(n+1);
int val[n+1];
for (int i = 1; i <= n; i++) {
cin >> val[i];
}
for (int i = 0; i < n-1; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
int used[n+1] = {0};
int parent[n+1]= {0};
vector<int> dp(n+1, 0);
vector<int> d(n+1, 0);
d[1] = 0;
dfs(1, adj, used, parent, dp, d, val);
for (int i = 1; i <= n; i++) {
cout << d[i] << " " << dp[i] << "\n";
}
//cout << dp[n] << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIGRmcyhpbnQgbm9kZSwgdmVjdG9yPHZlY3RvcjxpbnQ+PiBhZGosIGludCB1c2VkW10sIGludCBwYXJlbnRbXSwgdmVjdG9yPGludD4gJmRwLCB2ZWN0b3I8aW50PiAmZCwgaW50IHZhbFtdKSB7Cgl1c2VkW25vZGVdID0gMTsKCWZvciAoYXV0byB2OiBhZGpbbm9kZV0pIHsKCQlpZiAoIXVzZWRbdl0pIHsKCQkJcGFyZW50W3ZdID0gbm9kZTsKCQkJZFt2XSA9IGRbbm9kZV0gKyAxOwoJCQlkZnModiwgYWRqLCB1c2VkLCBwYXJlbnQsIGRwLCBkLCB2YWwpOwoJCX0KCX0KCQoJZHBbbm9kZV0gPSB2YWxbbm9kZV0gXiBkW25vZGVdOwoJaW50IHN1bSA9IDA7CgkKCWZvciAoYXV0byB2OiBhZGpbbm9kZV0pIHsKCQlpZiAodiAhPSBwYXJlbnRbbm9kZV0pIHsKCQkgICAgc3VtICs9IGRwW3ZdOwoJCX0KCX0KCQoJZHBbbm9kZV0gKz0gc3VtOwp9CgppbnQgbWFpbigpIHsKCWludCBuOwoJY2luID4+IG47CgkKCXZlY3Rvcjx2ZWN0b3I8aW50Pj4gYWRqKG4rMSk7CglpbnQgdmFsW24rMV07CgkKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoJCWNpbiA+PiB2YWxbaV07Cgl9CgkKCWZvciAoaW50IGkgPSAwOyBpIDwgbi0xOyBpKyspIHsKCQlpbnQgdSwgdjsKCQljaW4gPj4gdSA+PiB2OwoJCQoJCWFkalt1XS5wdXNoX2JhY2sodik7CgkJYWRqW3ZdLnB1c2hfYmFjayh1KTsKCX0KCQoJaW50IHVzZWRbbisxXSA9IHswfTsKCWludCBwYXJlbnRbbisxXT0gezB9OwoJdmVjdG9yPGludD4gZHAobisxLCAwKTsKCXZlY3RvcjxpbnQ+IGQobisxLCAwKTsKCWRbMV0gPSAwOwoJCglkZnMoMSwgYWRqLCB1c2VkLCBwYXJlbnQsIGRwLCBkLCB2YWwpOwoJCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKCQljb3V0IDw8IGRbaV0gPDwgIiAiIDw8IGRwW2ldIDw8ICJcbiI7Cgl9CgkKCS8vY291dCA8PCBkcFtuXSA8PCAiXG4iOwoJcmV0dXJuIDA7Cn0=