#ifdef NACHIA
#define _GLIBCXX_DEBUG
#else
#define NDEBUG
#endif
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using i64 = long long;
using u64 = unsigned long long;
#define rep(i,n) for(int i=0; i<int(n); i++)
const i64 INF = 1001001001001001001;
template<typename A> void chmin(A& l, const A& r){ if(r < l) l = r; }
template<typename A> void chmax(A& l, const A& r){ if(l < r) l = r; }
using namespace std;

void testcase(){
    int N; cin >> N;
    if(N == 1){ cout << "No\n"; return; }
    cout << "Yes\n";
    vector<int> F(N);
    rep(i,N) F[i] = (i%2 == 0 ? 1 : -1);
    if(N%2 == 1) F[N-2] *= 2;
    rep(i,1<<N){
        rep(j,1<<N){
            if(j) cout << " ";
            int d = i ^ j;
            if(d == 0 || (d & -d) != d){ cout << "0"; continue; }
            int t = 0;
            while(!(d & (1 << t))) t++;
            int p = 0;
            rep(x,N) p ^= (i >> x) & 1;
            int k = F[t];
            if(p) k = -k;
            cout << k;
        }
        cout << "\n";
    }
}

int main(){
    ios::sync_with_stdio(false); cin.tie(nullptr);
    testcase();
    return 0;
}