#include #include #define rep(i,n) for (int i = 0; i < int(n); ++i) #define repb(i,n) for (int i = int(n)-1; i >= 0; --i) using namespace std; using namespace atcoder; using P = pair; templatevoid priv(vector &v){if(v.size()==0){cout<> n; n = 1 << n; vector ar(n); rep(i,n) cin >> ar[i]; vector> v(n,vector(30,-1)); rep(i,n) if (ar[i] != -1) rep(j,30) v[i][j] = ar[i] >> j & 1; rep(d,30){ queue

que; rep(i,n) rep(j,n){ if (v[i][d] == 0 && v[j][d] == 0) que.push(P(i,j)); } while (!que.empty()){ P p = que.front(); que.pop(); int a = p.first; int b = p.second; if (v[a^b][d] == -1){ v[a^b][d] = 0; rep(i,n) if (v[i][d] == 0) que.push(P(a^b,i)); } } rep(i,n) if (v[i][d] == -1) v[i][d] = 1; } vector ans(n,0); rep(i,n){ repb(j,30) ans[i] += v[i][j], ans[i] *= 2; ans[i] /= 2; } bool t = true; rep(i,n) rep(j,n){ if (ans[i^j] < (ans[i] ^ ans[j])) t = false; } if (t) cout << "Yes" << endl, priv(ans); else cout << "No" << endl; }