#include <bits/stdc++.h>
using namespace std;
// parity problem using bit manipulation
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+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vIHBhcml0eSBwcm9ibGVtIHVzaW5nIGJpdCBtYW5pcHVsYXRpb24KCnZvaWQgZGZzKGludCBub2RlLCB2ZWN0b3I8dmVjdG9yPGludD4+IGFkaiwgaW50IHVzZWRbXSwgaW50IHBhcmVudFtdLCB2ZWN0b3I8aW50PiAmZHAsIHZlY3RvcjxpbnQ+ICZkLCBpbnQgdmFsW10pIHsKCXVzZWRbbm9kZV0gPSAxOwoJZm9yIChhdXRvIHY6IGFkaltub2RlXSkgewoJCWlmICghdXNlZFt2XSkgewoJCQlwYXJlbnRbdl0gPSBub2RlOwoJCQlkW3ZdID0gZFtub2RlXSArIDE7CgkJCWRmcyh2LCBhZGosIHVzZWQsIHBhcmVudCwgZHAsIGQsIHZhbCk7CgkJfQoJfQoJCglkcFtub2RlXSA9IHZhbFtub2RlXSBeIGRbbm9kZV07CglpbnQgc3VtID0gMDsKCQoJZm9yIChhdXRvIHY6IGFkaltub2RlXSkgewoJCWlmICh2ICE9IHBhcmVudFtub2RlXSkgewoJCSAgICBzdW0gKz0gZHBbdl07CgkJfQoJfQoJCglkcFtub2RlXSArPSBzdW07Cn0KCmludCBtYWluKCkgewoJaW50IG47CgljaW4gPj4gbjsKCQoJdmVjdG9yPHZlY3RvcjxpbnQ+PiBhZGoobisxKTsKCWludCB2YWxbbisxXTsKCQoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkJY2luID4+IHZhbFtpXTsKCX0KCQoJZm9yIChpbnQgaSA9IDA7IGkgPCBuLTE7IGkrKykgewoJCWludCB1LCB2OwoJCWNpbiA+PiB1ID4+IHY7CgkJCgkJYWRqW3VdLnB1c2hfYmFjayh2KTsKCQlhZGpbdl0ucHVzaF9iYWNrKHUpOwoJfQoJCglpbnQgdXNlZFtuKzFdID0gezB9OwoJaW50IHBhcmVudFtuKzFdPSB7MH07Cgl2ZWN0b3I8aW50PiBkcChuKzEsIDApOwoJdmVjdG9yPGludD4gZChuKzEsIDApOwoJZFsxXSA9IDA7CgkKCWRmcygxLCBhZGosIHVzZWQsIHBhcmVudCwgZHAsIGQsIHZhbCk7CgkKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoJCWNvdXQgPDwgZFtpXSA8PCAiICIgPDwgZHBbaV0gPDwgIlxuIjsKCX0KCQoJLy9jb3V0IDw8IGRwW25dIDw8ICJcbiI7CglyZXR1cm4gMDsKfQ==