#include<bits/stdc++.h> using namespace std; const int MAX=30; int val[MAX][MAX]; bool visited[MAX][MAX]; const int inf=1e9; int n; const int dx[]= {1,-1,1,-1,1,-1,1,-1}; const int dy[]= {1,1,-1,-1,1,1,-1,-1}; bool valid(int i,int j) { if(i<=0||i>n||j<=0||j>n) return false; return true; } int ans(int i,int j) { fill(val[0],val[MAX-1]+MAX,inf); fill(visited[0],visited[MAX-1]+MAX,false); queue<pair<int,int> >q; q.push(make_pair(1,1)); val[1][1]=0; while(!q.empty()) { pair<int,int>temp=q.front(); //cout<<temp.first<<" "<<temp.second<<endl; q.pop(); if(temp.first==n&&temp.second==n) break; if(visited[temp.first][temp.second]) continue; visited[temp.first][temp.second]=true; for(int k=0; k<8; k++) { int x=temp.first; int y=temp.second; int a=i; int b=j; if(k>=4) swap(a,b); int nx=x+dx[k]*a; int ny=y+dy[k]*b; if(valid(nx,ny)&&val[nx][ny]>1+val[x][y]) { q.push(make_pair(nx,ny)); val[nx][ny]=1+val[x][y]; } } } if(val[n][n]==inf) return -1; return val[n][n]; } int main() { ios_base::sync_with_stdio(false); cin>>n; for(int i=1; i<n; i++) { for(int j=1; j<n; j++) cout<<ans(i,j)<<" "; cout<<endl; } return 0; }