#include <bits/stdc++.h>
using namespace std;
int mex(set<int> s) {
  int v = 0;
  while (s.count(v) > 0) v++;
  return v;
}
int g[65]{0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4,  4,  5,  5,  5,  5, 5, 5,
          6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7,  7,  8,  8,  8,  8, 8, 8,
          8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10};
const int MAXN = 1000007;
int s[MAXN];
map<pair<int, long long>, int> dp;
int grundy(pair<int, long long> s) {
  if (dp.find(s) != dp.end()) return dp[s];
  long long mask = s.second;
  int &g = dp[s];
  set<int> S;
  for (int i = 1; i <= 60; i++) {
    if (!(mask & (1ll << i)) && s.first >= i) {
      S.insert(grundy(make_pair(s.first - i, (mask | (1ll << i)))));
    }
  }
  return g = mex(S);
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &s[i]);
  }
  if (n == 1)
    printf("NO\n");
  else {
    int XOR = 0;
    for (int i = 0; i < n; i++) {
      XOR ^= grundy(make_pair(s[i], 0));
    }
    if (XOR == 0)
      printf("YES\n");
    else
      printf("NO\n");
  }
  return 0;
}
