#include<bits/stdc++.h> using namespace std; int n; int bfs(int x,int y) { pair<int,int>p,start,r,qq; stack<pair<int,int> >q; map<pair<int,int >,pair<int,int> >m; map<pair<int,int>,int>state; int i,j; int length[n+1][n+1]; memset(length,0,sizeof(length)); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { r=make_pair(i,j); state[r]=0; } } start=make_pair(0,0); length[0][0]=0; m[start]=start; q.push(start); state[start]=1; int p1,p2; int x_axis[8]={-x,-x,-y,-y,x,x,y,y}; int y_axis[8]={-y,y,-x,x,-y,y,x,-x}; int flag=0,e,f; while(!q.empty()) { p=q.top(); q.pop(); p1=p.first; p2=p.second; // printf("p1=%d p2=%d\n",p1,p2); for(i=0;i<8;i++) { e=p1+x_axis[i]; f=p2+y_axis[i]; // printf("e=%d f=%d\n",e,f); qq=make_pair(e,f); if(e>=0 && e<n && f>=0 && f<n) { // printf("e=%d f=%d\n",e,f); if(state[qq]==0) { q.push(qq); // printf("%d & %d are pushed\n",e,f); length[e][f]=length[p1][p2]+1; state[qq]=1; if(e==n-1 && f==n-1) { flag=1; // printf("Hello\n"); break; } } } } if(flag==1) break; } if(flag==0) return -1; else return length[n-1][n-1]; } int main() { int i,j; scanf("%d",&n); vector<int>v; int d; for(i=1;i<=4;i++) { for(j=1;j<=4;j++) { d=bfs(i,j); v.push_back(d); } } int cnt=0; for(i=0;i<v.size();i++) { cnt++; printf("%d ",v[i]); if(cnt==4) { cnt=0; printf("\n"); } } return 0; }