#include <bits/stdc++.h>
#define int long long
#define pii pair<int, int>
#define ALL(v) (v).begin(), v.end()
using namespace std;
const int maxn = 1e6 + 5;
const int mod = 1e9 + 7;
const int oo = 1e18;
const int logg = 19;
const int base = 31;
int n, a[maxn], pre[maxn], ans = 0;
set<int> S[maxn];
vector<int> adj[maxn];
void dfs(int u, int p){
pre[u] = pre[p] ^ a[u];
S[u].insert(pre[u]);
bool del = false;
for(int v : adj[u]){
if(v == p) continue;
dfs(v, u);
if(del) continue;
bool check = false;
if(S[u].size() < S[v].size()){
for(int x : S[u]){
if(S[v].count(x ^ a[u])){
del = true;
break;
}
}
}
else{
for(int x : S[v]){
if(S[u].count(x ^ a[u])){
check = true;
break;
}
}
}
if(check){
del = true;
}
else{
if(S[u].size() < S[v].size()){
S[u].swap(S[v]);
}
for(int x : S[v]){
S[u].insert(x);
}
}
}
if(del){
ans++;
S[u].clear();
}
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
//freopen("dincpath.inp", "r", stdin);
//freopen("dincpath.out", "w", stdout);
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
for(int i = 1; i < n; i++){
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs(1, 0);
cout << ans;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIHBpaSBwYWlyPGludCwgaW50PgojZGVmaW5lIEFMTCh2KSAodikuYmVnaW4oKSwgdi5lbmQoKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgbWF4biA9IDFlNiArIDU7CmNvbnN0IGludCBtb2QgPSAxZTkgKyA3Owpjb25zdCBpbnQgb28gPSAxZTE4Owpjb25zdCBpbnQgbG9nZyA9IDE5Owpjb25zdCBpbnQgYmFzZSA9IDMxOwppbnQgbiwgYVttYXhuXSwgcHJlW21heG5dLCBhbnMgPSAwOwpzZXQ8aW50PiBTW21heG5dOwp2ZWN0b3I8aW50PiBhZGpbbWF4bl07CnZvaWQgZGZzKGludCB1LCBpbnQgcCl7CiAgICBwcmVbdV0gPSBwcmVbcF0gXiBhW3VdOwogICAgU1t1XS5pbnNlcnQocHJlW3VdKTsKICAgIGJvb2wgZGVsID0gZmFsc2U7CiAgICBmb3IoaW50IHYgOiBhZGpbdV0pewogICAgICAgIGlmKHYgPT0gcCkgY29udGludWU7CiAgICAgICAgZGZzKHYsIHUpOwogICAgICAgIGlmKGRlbCkgY29udGludWU7CiAgICAgICAgYm9vbCBjaGVjayA9IGZhbHNlOwogICAgICAgIGlmKFNbdV0uc2l6ZSgpIDwgU1t2XS5zaXplKCkpewogICAgICAgICAgICBmb3IoaW50IHggOiBTW3VdKXsKICAgICAgICAgICAgICAgIGlmKFNbdl0uY291bnQoeCBeIGFbdV0pKXsKICAgICAgICAgICAgICAgICAgICBkZWwgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGZvcihpbnQgeCA6IFNbdl0pewogICAgICAgICAgICAgICAgaWYoU1t1XS5jb3VudCh4IF4gYVt1XSkpewogICAgICAgICAgICAgICAgICAgIGNoZWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZihjaGVjayl7CiAgICAgICAgICAgIGRlbCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGlmKFNbdV0uc2l6ZSgpIDwgU1t2XS5zaXplKCkpewogICAgICAgICAgICAgICAgU1t1XS5zd2FwKFNbdl0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvcihpbnQgeCA6IFNbdl0pewogICAgICAgICAgICAgICAgU1t1XS5pbnNlcnQoeCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBpZihkZWwpewogICAgICAgIGFucysrOwogICAgICAgIFNbdV0uY2xlYXIoKTsKICAgIH0KfQpzaWduZWQgbWFpbigpewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKCWNpbi50aWUoMCk7Cgljb3V0LnRpZSgwKTsKCS8vZnJlb3BlbigiZGluY3BhdGguaW5wIiwgInIiLCBzdGRpbik7CgkvL2ZyZW9wZW4oImRpbmNwYXRoLm91dCIsICJ3Iiwgc3Rkb3V0KTsKCWNpbiA+PiBuOwoJZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgICAgIGNpbiA+PiBhW2ldOwoJfQoJZm9yKGludCBpID0gMTsgaSA8IG47IGkrKyl7CiAgICAgICAgaW50IHUsIHY7CiAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICBhZGpbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGFkalt2XS5wdXNoX2JhY2sodSk7Cgl9CiAgICBkZnMoMSwgMCk7CiAgICBjb3V0IDw8IGFuczsKCXJldHVybiAwOwp9Cg==