/* ---------- STL Libraries ---------- */
// IO library
#include <cstdio>
#include <fstream>
#include <iomanip>
#include <ios>
#include <iostream>

// algorithm library
#include <algorithm>
#include <cmath>
#include <numeric>
#include <random>
#include <cstring>

// container library
#include <array>
#include <bitset>
#include <deque>
#include <map>
#include <unordered_map>
#include <queue>
#include <set>
#include <string>
#include <tuple>
#include <vector>
#include <stack>

/* ---------- Namespace ---------- */
using namespace std;

/* ---------- Type ---------- */
using ll = long long;
#define int ll
#define P pair<ll, ll>

/* ---------- Constants  */
const double PI = 3.141592653589793238462643383279;
const ll MOD = 1e9 + 7;
const int INF = 1LL << 55;

/* v-v-v-v-v-v-v-v-v Main Part v-v-v-v-v-v-v-v-v */
signed main() {
    int N;
    cin >> N;
    map<int, int> m;
    for (int i = 0; i < N; i++) {
        int a;
        cin >> a;
        m[a]++;
    }

    if (m.size() > 3) {
        cout << "No" << endl;
        return 0;
    }

    vector<int> vec;
    for (auto it = m.begin(); it != m.end(); it++) {
        vec.push_back(it->first);
    }

    if (m.size() == 3) {
        int x = vec[0];
        int y = vec[1];
        int z = vec[2];

        /*
        if (!(x == y ^ z)) {
            cout << "No" << endl;
            return 0;
        }
         */

        for (int k = 0; k < 2; k++) {
            int first = x;
            int second = vec[k];
            int next;
            int x_num = 1;
            int y_num = 0;
            int z_num = 0;
            if (k == 0) x_num++;
            else if (k == 1) y_num++;
            else z_num++;

            bool valid = true;

            for (int i = 2; i < N; i++) {
                next = first ^ second;
                if (next == x) x_num++;
                else if (next == y) y_num++;
                else if (next == z) z_num++;
                else {
                    valid = false;
                    break;
                }

                first = second;
                second = next;
            }

            if (!valid) continue;

            if (second == first ^ x && x_num == m[x] && y_num == m[y] && z_num == m[z]) {
                cout << "Yes" << endl;
                return 0;
            }
        }

        cout << "No" << endl;

        /*
        if (N % 3 == 0 && vec[0] ^ vec[1] == vec[2] && m[vec[0]] == m[vec[1]] && m[vec[1]] == m[vec[2]]) {
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }
         */
    } else if (m.size() == 2) {
        int x = vec[0]; // こっちがおおい
        int y = vec[1];
        if (m[y] > m[x]) {
            swap(x, y);
        } else if (m[y] == m[x]) {
            if (y > x) swap(x, y);
        }

        if (y != 0) {
            cout << "No" << endl;
            return 0;
        }

        if (m[x] >= 2) {
            int numx = 2;
            int num0 = 0;
            int first = x;
            int second = x;
            int next;
            for (int i = 2; i < N; i++) {
                next = first ^ second;
                if (next == 0) num0++;
                else numx++;

                first = second;
                second = next;
            }

            if (second == first ^ x && m[x] == numx && m[y] == num0) {
                cout << "Yes" << endl;
                return 0;
            }
        }

        int numx = 1;
        int num0 = 1;
        int first = x;
        int second = 0;
        int next;
        for (int i = 2; i < N; i++) {
            next = first ^ second;
            if (next == 0) num0++;
            else numx++;

            first = second;
            second = next;
        }

        if (second == first ^ x && m[x] == numx && m[y] == num0) {
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }

        /*
        if (N % 3 == 0 && m[x] == 2 * m[y]) {
            cout << "Yes" << endl;
        } else if (N % 3 == 2 && (m[x] - 1) == 2 * (m[y] - 1)) {
            cout << "Yes" << endl;
        } else if (N % 3 == 1 && (m[x] - 1) == 2 * m[y]) {
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }
         */
    } else {
        if (vec[0] == 0) {
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }
    }

    return 0;
}

Measured memory_bytes: 5120