#include <bits/stdc++.h>
#define ll long long int
#define fio ios_base::sync_with_stdio(0);cin.tie(0)
#define sd(t) scanf("%d",&t)
#define pd(t) printf("%d\n",t)
#define slld(t) scanf("%lld",&t)
#define plld(t) printf("%lld\n",t)
#define sc(t) scanf("%c",&t)
#define pb(x) push_back(x)
#define ii pair<int,int>
#define vi vector<int>
#define vvi vector<vi >
#define vii vector<ii >
#define vvii vector<vii >
#define clr(x) memset(x,0,sizeof(x))
#define rep(i,begin,end) for(__typeof(end) i=begin-(begin>end);i!=end-(begin>end);i+=1-2*(begin>end))
#define M_PI 3.14159265358979323846
#define MOD 1000000007
#define MAX 100005
#define EPS 1e-12
using namespace std;

int dx[] = {1,-1,1,-1};
int dy[] = {1,1,-1,-1};
int n, A[30][30];

int go(int a, int b)
{
	rep(i,0,25) rep(j,0,25) A[i][j] = -1;
	A[0][0] = 0;

	queue<ii> q;
	q.push({0,0});
	while(!q.empty())
	{
		ii src = q.front(); q.pop();
		int x = src.first, y = src.second;

		for(int i=0; i<4; i++)
		{
			int x1 = x + dx[i]*a;
			int y1 = y + dy[i]*b;
			if(x1<0 || x1>=n || y1<0 || y1>=n) continue;
			if(A[x1][y1]==-1) 
			{
				A[x1][y1] = A[x][y] + 1;
				q.push({x1,y1});
			}
		}
		for(int i=0; i<4; i++)
		{
			int x1 = x + dx[i]*b;
			int y1 = y + dy[i]*a;
			if(x1<0 || x1>=n || y1<0 || y1>=n) continue;
			if(A[x1][y1]==-1) 
			{
				A[x1][y1] = A[x][y] + 1;
				q.push({x1,y1});
			}
		}
	}
	return A[n-1][n-1];
}

int main()
{
	sd(n);
	int ans[25][25];

	int yo = (n-1)/2;
	for(int i=1; i<n; i++)
	{
		for(int j=i; j<n; j++)
		{
			if(i<=yo || j<=yo) ans[i][j] = go(i,j);
			else ans[i][j] = -1;
			ans[j][i] = ans[i][j];
		}
	}
	ans[n-1][n-1] = 1;

	rep(i,1,n)
	{
		rep(j,1,n) printf("%d ", ans[i][j]);
		printf("\n");
	}

	return 0;
}