#include <bits/stdc++.h>
using namespace std;
using vint = vector<int>;
using vll = vector<long long>;
using vbool = vector<bool>;
template <class T>
using arr = vector<vector<T>>;
template <class T>
int popcount(T &a) {
  int c = 0;
  for (int i = 0; i < (8 * (int)sizeof(a)); i++) {
    if ((a >> i) & 1) c++;
  }
  return c;
}
template <class T>
void pr(T x) {
  cout << x << endl;
}
template <class T>
void prvec(vector<T> &a) {
  for (int i = 0; i < (a.size() - 1); i++) {
    cout << a[i] << " ";
  }
  pr(a[a.size() - 1]);
}
template <class T>
void prarr(arr<T> &a) {
  for (int i = 0; i < (a.size()); i++)
    if (a[i].empty())
      pr("");
    else
      prvec(a[i]);
}
template <class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
int main() {
  int n;
  cin >> n;
  int z = 0;
  map<int, int> m;
  vint a(n);
  for (int i = 0; i < (n); i++) {
    cin >> a[i];
    if (a[i] == 0) z++;
    m[a[i]]++;
  }
  if (z == n) {
    pr("Yes");
    return 0;
  }
  if (z > 0) {
    if (m.size() > 2)
      pr("No");
    else {
      if (m.size() == 2 && n % 3 == 0 && z == n / 3)
        pr("Yes");
      else
        pr("No");
    }
    return 0;
  }
  if (m.size() != 3) {
    pr("No");
    return 0;
  }
  vint b, c;
  for (auto p : m) {
    c.push_back(p.second);
    b.push_back(p.first);
  }
  if (c[0] != c[1] || c[1] != c[2]) {
    pr("No");
    return 0;
  }
  if (b[0] ^ b[1] == b[2])
    pr("Yes");
  else
    pr("No");
  return 0;
}
