/*--.--.--.--.--.--.--.--.--.--.--.--.--*
 *      By-Anshal Dwivedi                         *
 *    IT , MNNIT Allahabad              *
 *        anshaldwivedi@gmail.com           *
 *--.--.--.--.--.--.--.--.--.--.--.--.--*/

#include <iostream>
#include <cstdio>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <cmath>
#include <set>
#include <limits.h>
#include <assert.h>
using namespace std;

#define mp make_pair
#define pb push
#define X first
#define Y second
#define null NULL
#define ll long long

#define tr(c, itr) for(itr = (c).begin(); itr != (c).end(); itr++)
#define present(container, element) (container.find(element) != container.end()) //for set,map,etc
#define cpresent(container, element) (find(all(container),element) != container.end()) //for vectors
#define all(c) c.begin(),c.end() //eg sort(all(v));
//Initialization
#define clr(a) memset(a,0,sizeof(a))
#define ini(a) memset(a,-1,sizeof(a))

//Input Output
#define inp(n) scanf("%d",&n)
#define inp2(n,m) inp(n), inp(m)
#define ins(s) scanf("%s",s)
#define inc(n) scanf("%c",&n)
#define inlf(n) scanf("%lf",&n)
#define inll(n) scanf("%lld",&n)
#define inll2(n,m) scanf("%lld%lld",&n,&m)

#define out(n) printf("%d\n",n)
#define out2(n,m) printf("%d %d\n",n,m)
#define outs(d) printf("%s\n",d)
#define sout(n) printf("%d ",n)
#define outll(n) printf("%lld\n",n)
#define soutll(n) printf("%lld ",n)
#define outll2(n,m) printf("%lld %lld\n",n,m)
#define nl printf("\n");

//loops
#define rep(i,n) for(int i=0;i<n;i++)
#define REP(i,a,b) for(int i=a;i<=b;i++)
#define PER(i,a,b) for(int i=b;i>=a;i--)

//const
#define mod 1000000007
#define MOD_INV 1000000006
#define MAX 100009
#define INF 999999999
#define PI 3.14159265358979323846264338327

ll modpow(ll base, ll exp, ll modulus) {base %= modulus;ll result = 1;while (exp > 0){if (exp & 1) result = (result * base) % modulus;
base = (base * base) % modulus;exp >>= 1;}return result;}
int vis[26][26];
int n;
bool isVal(int x,int y){
    if(x<=0||y<=0)
        return false;
    if(x>n||y>n)
        return false;
    return true;
}
void bfs(int a,int b){
    ini(vis);
    if(a==1&&b==3){
        int k=1;
    }
    vis[1][1]=0;
    queue<pair<int,int> > q;
    q.pb(mp(1,1));
    while(!q.empty()){
        int sx=q.front().X;
        int sy=q.front().Y;
        q.pop();

        if(isVal(sx+a,sy+b)){
            if(vis[sx+a][sy+b]==-1||vis[sx+a][sy+b]>vis[sx][sy]+1){
                vis[sx+a][sy+b]=vis[sx][sy]+1;
                q.pb(mp(sx+a,sy+b));
            }
        }
        if(isVal(sx+a,sy-b)){
            if(vis[sx+a][sy-b]==-1||vis[sx+a][sy-b]>vis[sx][sy]+1){
                vis[sx+a][sy-b]=vis[sx][sy]+1;
                q.pb(mp(sx+a,sy-b));
            }
        }
        if(isVal(sx-a,sy+b)){
            if(vis[sx-a][sy+b]==-1||vis[sx-a][sy+b]>vis[sx][sy]+1){
                vis[sx-a][sy+b]=vis[sx][sy]+1;
                q.pb(mp(sx-a,sy+b));
            }
        }
        if(isVal(sx-a,sy-b)){
            if(vis[sx-a][sy-b]==-1||vis[sx-a][sy-b]>vis[sx][sy]+1){
                vis[sx-a][sy-b]=vis[sx][sy]+1;
                q.pb(mp(sx-a,sy-b));
            }
        }
        int tmp=a;
        a=b;
        b=tmp;
        if(isVal(sx+a,sy+b)){
            if(vis[sx+a][sy+b]==-1||vis[sx+a][sy+b]>vis[sx][sy]+1){
                vis[sx+a][sy+b]=vis[sx][sy]+1;
                q.pb(mp(sx+a,sy+b));
            }
        }
        if(isVal(sx+a,sy-b)){
            if(vis[sx+a][sy-b]==-1||vis[sx+a][sy-b]>vis[sx][sy]+1){
                vis[sx+a][sy-b]=vis[sx][sy]+1;
                q.pb(mp(sx+a,sy-b));
            }
        }
        if(isVal(sx-a,sy+b)){
            if(vis[sx-a][sy+b]==-1||vis[sx-a][sy+b]>vis[sx][sy]+1){
                vis[sx-a][sy+b]=vis[sx][sy]+1;
                q.pb(mp(sx-a,sy+b));
            }
        }
        if(isVal(sx-a,sy-b)){
            if(vis[sx-a][sy-b]==-1||vis[sx-a][sy-b]>vis[sx][sy]+1){
                vis[sx-a][sy-b]=vis[sx][sy]+1;
                q.pb(mp(sx-a,sy-b));
            }
        }
        tmp=a;
        a=b;
        b=tmp;
    }
}
int main(){
    
    cin>>n;
    for(int i=1;i<n;i++){
        for(int j=1;j<n;j++){
            bfs(i,j);
            printf("%d ",vis[n][n]);
        }
        nl;
    }
    return 0;
}