#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <queue>
#include <stack>
#include <string>
#include <bitset>
#include <cstdio>
#include <limits>
#include <vector>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <fstream>
#include <numeric>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <unordered_map>

using namespace std;

int n;

int count (int a, int b) {
    vector<int> v[n];
    for (int i=0; i<n; i++) {
        v[i].resize(n,100000);
    }
    v[0][0]=0;
    bool ok=false;
    while (!ok) {
        ok=true;
        for (int i=0; i<n; i++)
            for (int j=0; j<n; j++) {
                if (i+a<n && j+b<n && v[i+a][j+b]>v[i][j]+1) {
                    v[i+a][j+b]=v[i][j]+1;
                    ok=false;
                }
                if (i+a<n && j-b>=0 && v[i+a][j-b]>v[i][j]+1) {
                    v[i+a][j-b]=v[i][j]+1;
                    ok=false;
                }
                if (i-a>=0 && j+b<n && v[i-a][j+b]>v[i][j]+1) {
                    v[i-a][j+b]=v[i][j]+1;
                    ok=false;
                }
                if (i-a>=0 && j-b>=0 && v[i-a][j-b]>v[i][j]+1) {
                    v[i-a][j-b]=v[i][j]+1;
                    ok=false;
                }
                if (i+b<n && j+a<n && v[i+b][j+a]>v[i][j]+1) {
                    v[i+b][j+a]=v[i][j]+1;
                    ok=false;
                }
                if (i+b<n && j-a>=0 && v[i+b][j-a]>v[i][j]+1) {
                    v[i+b][j-a]=v[i][j]+1;
                    ok=false;
                }
                if (i-b>=0 && j+a<n && v[i-b][j+a]>v[i][j]+1) {
                    v[i-b][j+a]=v[i][j]+1;
                    ok=false;
                }
                if (i-b>=0 && j-a>=0 && v[i-b][j-a]>v[i][j]+1) {
                    v[i-b][j-a]=v[i][j]+1;
                    ok=false;
                }
            }
    }
    if (v[n-1][n-1]==100000) return -1;
    return v[n-1][n-1];
}

int main(){
    cin >> n;
    vector<int> ans[n];
    for (int i=0; i<n; i++) {
        ans[i].resize(n);
    }
    for (int i=1; i<n; i++)
        for (int j=i; j<n; j++) {
            ans[i][j]=ans[j][i]=count(i,j);
        }
    for (int i=1; i<n; i++) {
        for (int j=1; j<n; j++)
            cout << ans[i][j] << ' ';
        cout << '\n';
    }
    return 0;
}