#include <bits/stdc++.h>
#define fi first
#define se second

using namespace std;

typedef pair<int, int> ii;
const int maxN = 30;
int N,F[maxN][maxN];

bool check(int x, int y)
{
    if (x < 1 || y < 1 || x > N || y > N || F[x][y] != -1) return 0;
    return 1;
}

int BFS(int x, int y)
{
    int u[8],v[8];
    u[0] = u[1] = -x; u[2] = u[3] = x; u[4] = u[5] = y; u[6] = u[7] = -y;
    v[0] = y; v[1] = -y; v[2] = y; v[3] = -y; v[4] = x; v[5] = -x; v[6] = x; v[7] = -x;
    memset(F,-1,sizeof(F));
    queue <ii> que;
    que.push(ii(1,1)); F[1][1] = 0;
    while (!que.empty())
    {
        int x = que.front().fi, y = que.front().se;
        que.pop();
        for (int i=0; i < 8; i++)
        {
            int xx = x+u[i], yy = y+v[i];
            if (check(xx,yy))
            {
                F[xx][yy] = F[x][y]+1;
                que.push(ii(xx,yy));
            }
        }
    }
    return F[N][N];
}

int main()
{
    cin >> N;
    for (int i=1; i < N; i++)
    {
        for (int j=1; j < N; j++) cout << BFS(i,j) << " ";
        cout << endl;
    }
}