#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;
}