#include <bits/stdc++.h>
typedef struct {
  int num;
  char used;
} HAT;
typedef struct camel {
  HAT *put;
  struct camel *left;
  struct camel *right;
} CAMEL;
int N;
HAT *hat;
CAMEL *camel;
int puthat(int num) {
  fflush(stdout);
  if (num == 0) {
    for (int i = 0; i < N; i++) {
      camel[num].put = &(hat[i]);
      hat[i].used = 1;
      if (puthat(num + 1) == 1) return 1;
      hat[i].used = 0;
      break;
    }
  } else if (num == 1) {
    for (int i = 0; i < N; i++) {
      if (hat[i].used == 1) continue;
      camel[num].put = &(hat[i]);
      hat[i].used = 1;
      if (puthat(num + 1) == 1) return 1;
      hat[i].used = 0;
      break;
    }
  } else {
    for (int i = 0; i < N; i++) {
      if (hat[i].used == 1) continue;
      if (((int)(camel[num].left->left->put->num) ^ (int)(hat[i].num)) ==
          camel[num].left->put->num) {
        if (num == N - 1) return 1;
        camel[num].put = &(hat[i]);
      } else {
        continue;
      }
      hat[i].used = 1;
      if (puthat(num + 1) == 1) return 1;
      hat[i].used = 0;
      break;
    }
  }
  return -1;
}
int main(void) {
  scanf("%d", &N);
  hat = (HAT *)malloc(sizeof(HAT) * N);
  camel = (CAMEL *)malloc(sizeof(CAMEL) * N);
  for (int i = 0; i < N; i++) {
    scanf("%d", &(hat[i].num));
    hat[i].used = 0;
    if (i == 0) {
      camel[i].left = &(camel[N - 1]);
      camel[i].right = &(camel[i + 1]);
    } else if (i == N - 1) {
      camel[i].left = &(camel[i - 1]);
      camel[i].right = &(camel[0]);
    } else {
      camel[i].left = &(camel[i - 1]);
    }
  }
  if (puthat(0) == 1) {
    printf("Yes\n");
  } else {
    printf("No\n");
  }
  return 0;
}
