#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
vector<int> a;
multiset<int> p;
int main() {
  ios_base::sync_with_stdio(false);
  int N;
  cin >> N;
  for (int i = 0; i < N; i++) {
    int o;
    cin >> o;
    a.push_back(o);
    p.insert(o);
  }
  int primo = -1;
  int prec;
  for (int i = 1; i < N; i++) {
    int g = a[i] ^ a[0];
    if (p.find(g) != p.end()) {
      primo = a[i];
      prec = g;
      p.erase(p.find(g));
      break;
    }
  }
  if (primo == -1) {
    cout << "No";
    return 0;
  }
  for (int i = 1; i < N - 1; i++) {
    int g = a[i] ^ prec;
    if (p.find(g) != p.end()) {
      primo = a[i];
      prec = g;
      p.erase(p.find(g));
    } else {
      break;
    }
  }
  if (a[N - 1] ^ prec == primo) {
    cout << "Yes";
    return 0;
  }
  for (int i = 1; i < N; i++) {
    int g = a[i] ^ a[0];
    if (p.find(g) != p.end()) {
      primo = a[i];
      prec = g;
      p.erase(g);
      break;
    }
  }
  if (primo == -1) {
    cout << "No";
    return 0;
  }
  for (int i = 1; i < N - 1; i++) {
    int g = a[i] ^ prec;
    if (p.find(g) != p.end()) {
      primo = g;
      prec = a[i];
      p.erase(g);
    } else {
      cout << "No";
      return 0;
    }
  }
  if (a[N - 1] ^ prec == primo) {
    cout << "Yes";
    return 0;
  }
  cout << "No";
  return 0;
}
