Problem: You are given an integer N.

Construct any one N-by-N matrix a that satisfies the conditions below. It can be proved that a solution always exists under the constraints of this problem.

* 1 \leq a_{i,j} \leq 10^{15}
* a_{i,j} are pairwise distinct integers.
* There exists a positive integer m such that the following holds: Let x and y be two elements of the matrix that are vertically or horizontally adjacent. Then, {\rm max}(x,y) {\rm mod} {\rm min}(x,y) is always m.

Constraints

* 2 \leq N \leq 500

Input

Input is given from Standard Input in the following format:


N


Output

Print your solution in the following format:


a_{1,1} ... a_{1,N}
:
a_{N,1} ... a_{N,N}

Output

Print your solution in the following format:


a_{1,1} ... a_{1,N}
:
a_{N,1} ... a_{N,N}

Example

Input

2


Output

4 7
23 10

Solution (in CPP):

Solution:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;

const int N=510;
int n,prm[N*2];
ll a[N][N];

struct node
{
	int dat,prm;
}b[N*2];

bool cmp(node x,node y)
{
	return x.dat<y.dat;
}

void findprm(int k)
{
	for (int i=2,m=0;m<k;i++)
	{
		bool flag=1;
		for (int j=2;j*j<=i;j++)
			if (i%j==0) flag=0;
		if (flag) prm[++m]=i;
	}
}

ll query(int x,int y,int opt)
{
	if (opt==1) return b[(x+y)/2].prm;
		else return b[(n+x-y+1)/2+n].prm;
}

int main()
{
	scanf("%d",&n);
	if (n==2) return !printf("4 7\n23 10");
	findprm(2*n);
	for (int i=1;i<=2*n;i++)
	{
		if (i<=n) b[i].dat=i*2-1;
			else b[i].dat=(2*n-i)*2;
		b[i].prm=prm[i];
	}
	sort(b+1,b+1+2*n,cmp);
	for (int i=1;i<=n;i++,putchar(10))
		for (int j=1;j<=n;j++)
			if ((i+j)&1)
				printf("%lld ",query(i,j,1)*query(i,j,2));
			else 	
			{
				if (1<i && i<n)
					printf("%lld ",query(i-1,j,1)*query(i-1,j,2)*query(i+1,j,1)*query(i+1,j,2)+1);
				else if (1<j && j<n)
					printf("%lld ",query(i,j-1,1)*query(i,j-1,2)*query(i,j+1,1)*query(i,j+1,2)+1);
				else if (i==1 && j==1)
					printf("%lld ",query(i,j+1,1)*query(i,j+1,2)*query(i+1,j,2)+1);
				else if (i==1 && j==n)
					printf("%lld ",query(i,j-1,1)*query(i,j-1,2)*query(i+1,j,1)+1);
				else if (i==n && j==1)
					printf("%lld ",query(i,j+1,1)*query(i,j+1,2)*query(i-1,j,1)+1);
				else if (i==n && j==n)
					printf("%lld ",query(i,j-1,1)*query(i,j-1,2)*query(i-1,j,2)+1);
				else puts("WYC AK IOI!!!!!");
			}
	return 0;
}