#include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> #include <cstring> #include <queue> #define mp make_pair using namespace std; int n,s[30][30]; int u[30][30]; void hii(int x,int y){ memset(u,-1,sizeof(u)); int i,j; queue<pair<pair<int,int>,int> > q; q.push(mp(mp(0,0),0)); u[0][0]=0; while(!q.empty()){ int a,b,c; a=q.front().first.first; b=q.front().first.second; c=q.front().second; if(a+x<n && b+y<n && u[a+x][b+y]==-1){ u[a+x][b+y]=c+1; q.push(mp(mp(a+x,b+y),u[a+x][b+y])); } if(a-x>=0 && b+y<n && u[a-x][b+y]==-1){ u[a-x][b+y]=c+1; q.push(mp(mp(a-x,b+y),u[a-x][b+y])); } if(a-x>=0 && b-y>=0 && u[a-x][b-y]==-1){ u[a-x][b-y]=c+1; q.push(mp(mp(a-x,b-y),u[a-x][b-y])); } if(a+x<n && b-y>=0 && u[a+x][b-y]==-1){ u[a+x][b-y]=c+1; q.push(mp(mp(a+x,b-y),u[a+x][b-y])); } if(a+y<n && b+x<n && u[a+y][b+x]==-1){ u[a+y][b+x]=c+1; q.push(mp(mp(a+y,b+x),u[a+y][b+x])); } if(a-y>=0 && b+x<n && u[a-y][b+x]==-1){ u[a-y][b+x]=c+1; q.push(mp(mp(a-y,b+x),u[a-y][b+x])); } if(a-y>=0 && b-x>=0 && u[a-y][b-x]==-1){ u[a-y][b-x]=c+1; q.push(mp(mp(a-y,b-x),u[a-y][b-x])); } if(a+y<n && b-x>=0 && u[a+y][b-x]==-1){ u[a+y][b-x]=c+1; q.push(mp(mp(a+y,b-x),u[a+y][b-x])); } q.pop(); } s[x][y]=u[n-1][n-1]; return; } int main() { int i,j; cin >> n; memset(s,-1,sizeof(s)); for(i=1;i<n;i++){ for(j=1;j<n;j++){ if(s[j][i]!=-1){ cout<<s[j][i]<<' '; } else{ hii(i,j); cout<<s[i][j]<<' '; } } cout<<endl; } return 0; }