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<stdio.h>
#include<assert.h>
typedef long long ll;
const int T=10000;
int pr[T+10];
bool np[T+10];
void sieve(){
	int i,j,M=0;
	for(i=2;i<=T;i++){
		if(!np[i])pr[++M]=i;
		for(j=1;j<=M&&i*pr[j]<=T;j++){
			np[i*pr[j]]=1;
			if(i%pr[j]==0)break;
		}
	}
}
ll gcd(ll a,ll b){return a%b==0?b:gcd(b,a%b);}
ll lcm(ll a,ll b){
	if(a==0||b==0)return a|b;
	return a/gcd(a,b)*b;
}
ll a[510][510];
int main(){
	sieve();
	int n,i,j,M;
	scanf("%d",&n);
	if(n==2){
		puts("4 7\n23 10");
		return 0;
	}
	M=0;
	for(i=1;i<n;i+=2){
		M++;
		for(j=1;j<=i;j++)a[j][i-j+1]=pr[M];
	}
	if(n&1){
		M++;
		for(i=1;i<=n;i++)a[n-i+1][i]=pr[M];
	}
	for(i=1;i<n;i+=2){
		M++;
		for(j=1;j<=i;j++)a[n-j+1][n-i+1+j-1]=pr[M];
	}
	for(i=1;i<=n;i+=2){
		M++;
		for(j=1;i+j-1<=n;j++)a[j][i+j-1]*=pr[M];
	}
	for(i=3;i<=n;i+=2){
		M++;
		for(j=1;i+j-1<=n;j++)a[i+j-1][j]*=pr[M];
	}
	for(i=1;i<=n;i++){
		for(j=1;j<=n;j++){
			if((i+j)&1)a[i][j]=lcm(lcm(a[i-1][j],a[i][j-1]),lcm(a[i+1][j],a[i][j+1]))+1;
		}
	}
	for(i=1;i<=n;i++){
		for(j=1;j<=n;j++)printf("%lld ",a[i][j]);
		putchar('\n');
	}
}