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<cassert>
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int maxp = 8000 + 10;
typedef long long ll;

bool notprime[maxp];
ll prime[maxp] , prime_cnt;
void sieve(){
	for(int i = 2;i < maxp;i++){
		if(!notprime[i]) prime[prime_cnt++] = i;
		for(int j = 0;i * prime[j] < maxp && j < prime_cnt;j++){
			ll t = i * prime[j]; notprime[t] = 1;
			if(i % prime[j] == 0) break;
		}
	}
}


ll gcd(ll a,ll b){ return b ? gcd(b,a % b) : a;}
ll lcm(ll a,ll b) { return a / gcd(a,b) * b;}

const int maxn = 500 + 10;
ll a[maxn][maxn];
int cnt,n;

int main(){
	sieve();
	scanf("%d",&n);
	if(n == 2) return !printf("4 7\n23 10");
	for(int i = 0;i <= n + 1;i++){
		for(int j = 0;j <= n + 1;j++){
			a[i][j] = 1;
		}
	}
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= n;j++){
			if((i + j) % 2 ==  0){
				a[i][j] = prime[(i + j >> 1) - 1] * prime[(i - j) / 2 + n / 2 + n];
			}
		}
	}
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= n;j++){
			if((i + j) & 1){
				a[i][j] = lcm(a[i][j - 1] , lcm(a[i][j + 1],lcm(a[i - 1][j],a[i + 1][j]))) + 1;
				assert(a[i][j] <= 1e15);
			}
		}
	}
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= n;j++){
			printf("%lld%c",a[i][j]," \n"[j == n]);
		}
	}	
}