inlineintcmp(node a, node b){return a.val < b.val;}
stack <int> S[70]; int Ans[Maxn];
main() { #ifdef hk_cnyali freopen("E.in", "r", stdin); freopen("E.out", "w", stdout); #endif scanf("%lld", &N); int sum = 0; for (int i = 1; i <= N; ++i) scanf("%lld", &A[i].val), sum ^= A[i].val;
for (int i = 1; i <= N; ++i) { int x = A[i].val; while (x) x >>= 1, A[i].h ++; S[A[i].h].push(i); }
for (int i = 1; i <= N; ++i) { int a = sum, len = 1, pos = 0; while (a) { if ((a & 1) && !S[len].empty()) { pos = S[len].top(); S[len].pop(); break; } ++len; a >>= 1; } if (!pos) { cout<<"No"<<endl; return0; } sum ^= A[pos].val; Ans[++Ans[0]] = A[pos].val; } reverse(Ans + 1, Ans + N + 1);
cout<<"Yes"<<endl; for (int i = 1; i <= N; ++i) printf("%lld ", Ans[i]); puts(""); return0; }