#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int type = 60;
vector<long long> bit[type];
long long ans[N];
int n, m, k, t;
long long p;
bool flag;
bool cmp(long long a, long long b) { return a > b; }
int main() {
  scanf("%d", &n);
  for (int i = 0; i < type; i++) bit[i].clear();
  for (int i = 1; i <= n; i++) {
    scanf("%I64d", &p);
    for (int j = type - 1; j >= 0; j--) {
      if ((p >> j) & 1) {
        bit[j].push_back(p);
        break;
      }
    }
  }
  p = 0;
  flag = 0;
  memset(ans, 0, sizeof(ans));
  for (int i = 0; i < type; i++) sort(bit[i].begin(), bit[i].end(), cmp);
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < type; j++)
      if (!((p >> j) & 1) && bit[j].size()) {
        ans[i] = bit[j][bit[j].size() - 1];
        p ^= ans[i];
        bit[j].pop_back();
        break;
      }
    if (!ans[i]) {
      flag = 1;
      break;
    }
  }
  if (flag) {
    printf("No\n");
  } else {
    printf("Yes\n");
    for (int i = 1; i <= n; i++) printf("%I64d ", ans[i]);
    printf("\n");
  }
  return 0;
}
