#include<bits/stdc++.h>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define ll long long int
ll n;
bool inrange(ll xx,ll yy)
{
    if(xx>=0&&xx<n&&yy>=0&&yy<n)
    return true;
    else
    return false;
}
ll bfs(ll sx,ll sy,ll a,ll b)
{
    queue< pair<ll,ll> >q;
    pair<ll,ll>pp;
    ll i,cx,cy,ncx,ncy,j;
    ll dist[n+1][n+1];
    ll vis[n+1][n+1];
   for(i=0;i<n;i++)
   {
       for(j=0;j<n;j++)
       {
           dist[i][j]=100000;
           vis[i][j]=0;
       }
   }
   ll r[]={-a,a,-a,a,-b,b,-b,b};
   ll u[]={b,b,-b,-b,-a,-a,a,a};
    q.push(make_pair(sx,sy));
    dist[sx][sy]=0;
    while(!q.empty())
    {
        pp=q.front();
        q.pop();
        cx=pp.first;
        cy=pp.second;
        if(vis[cx][cy]==1)
        continue;
        vis[cx][cy]=1;
        for(i=0;i<8;i++)
        {
            ncx=cx+r[i];
            ncy=cy+u[i];
            if(inrange(ncx,ncy)&&vis[ncx][ncy]==0&&dist[cx][cy]+1<dist[ncx][ncy])
            {
                dist[ncx][ncy]=1+dist[cx][cy];
                q.push(make_pair(ncx,ncy));
            }
        }
        
    }
    return dist[n-1][n-1];
}
int main()
{
    ll t,i,j;
    cin>>n;
    for(i=1;i<n;i++)
    {
        for(j=1;j<n;j++)
        {
            t=bfs(0,0,i,j);
            if(t==100000)
            cout<<"-1 ";
            else
            cout<<t<<" ";
        }
        cout<<"\n";
    }
    return 0;
}