#include <bits/stdc++.h>
int cmp(const void* p, const void* q) { return *(int*)p - *(int*)q; }
int main(void) {
  int n;
  int a[100000] = {0};
  int bit[3][300] = {0};
  int max = 0, mid = 1000000001, min = 0;
  int max_cnt = 0, mid_cnt = 0, min_cnt = 0;
  int temp;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  if (n % 3) {
    for (int i = 0; i < n; i++) {
      if (a[i]) {
        printf("No");
        break;
      }
      if (i == n - 1) {
        printf("Yes");
      }
    }
  } else {
    qsort(a, n, sizeof(int), cmp);
    min = a[0];
    for (int i = 0; i < n; i++) {
      if (min == a[i])
        min_cnt++;
      else if (min < a[i] && a[i] < mid) {
        mid = a[i], mid_cnt++;
      } else if (mid == a[i])
        mid_cnt++;
      else if (mid < a[i]) {
        max = a[i];
        max_cnt++;
      } else if (max == a[i])
        max_cnt++;
    }
    printf("min=%d  mid=%d max=%d\n", min, mid, max);
    printf("min_cnt=%d  mid_cnt=%d max_cnt=%d\n", min_cnt, mid_cnt, max_cnt);
    if (min == 0 && max == 0) {
      if (min_cnt == n || min_cnt == 2 * mid_cnt)
        printf("Yes");
      else
        printf("No");
    } else {
      if (min_cnt == mid_cnt && mid_cnt == max_cnt) {
        temp = min;
        for (int j = 0; temp != 0; j++) {
          bit[0][j] = temp % 2;
          temp /= 2;
        }
        temp = mid;
        for (int j = 0; temp != 0; j++) {
          bit[1][j] = temp % 2;
          temp /= 2;
        }
        temp = max;
        for (int j = 0; temp != 0; j++) {
          bit[2][j] = temp % 2;
          temp /= 2;
        }
        for (int i = 0; i <= floor(log2(max)); i++) {
          temp = 0;
          for (int j = 0; j < 3; j++) {
            temp += bit[j][i];
          }
          if (temp % 2) {
            printf("No");
            break;
          } else if (i == floor(log2(max))) {
            printf("Yes");
          }
        }
      } else
        printf("No");
    }
  }
  return 0;
}
