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<bits/stdc++.h>
#define title "title"
#define ll long long
#define ull unsigned ll
#define fix(x) fixed<<setprecision(x)
#define pii pair<ll,ll>
#define vll vector<ll>
#define pb push_back
using namespace std;
void Freopen(){
	freopen(title".in","r",stdin);
	freopen(title".out","w",stdout);
}
ll read(){
	ll g=0,f=1;
	char ch=getchar();
	while(ch<'0'||'9'<ch){if(ch=='-')f=-1;ch=getchar();}
	while('0'<=ch&&ch<='9'){g=g*10+ch-'0';ch=getchar();}
	return g*f;
}
const ll N=1e4+5;
const ll M=1005;
ll vis[N],p[N],tot,a[M][M],n;
void init(ll n){
	for(ll i=2;i<=n;i++){
		if(!vis[i])p[++p[0]]=i;
		for(ll j=1;j<=p[0]&&i*p[j]<=n;j++){
			vis[i*p[j]]=1;
			if(!(i%p[j]))break;
		}
	}
}
ll gcd(ll x,ll y){
	if(y==0)return x;
	else return gcd(y,x%y);
}
ll lcm(ll x,ll y){
	if(!x||!y)return x+y;
	return x/gcd(x,y)*y;
}
signed main(){
	n=read();init(1e4);
	if(n==2)return cout<<"4 7\n23 10",signed();
	for(ll i=1;i<=n;i++)for(ll j=(i+1&1)+1;j<=n;j+=2)a[i][j]=p[(i+j)/2]*p[n+(i-j)/2+(n+1)/2];
	for(ll i=1;i<=n;i++)for(ll j=(i&1)+1;j<=n;j+=2)if((i+j)&1)a[i][j]=lcm(a[i-1][j],lcm(a[i+1][j],lcm(a[i][j-1],a[i][j+1])))+1;
	for(ll i=1;i<=n;i++,cout<<'\n')for(ll j=1;j<=n;j++,cout<<' ')cout<<a[i][j];
	return signed();
}