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>
using namespace std;
typedef long long LL;
typedef pair<int, int> P;
template<typename T> inline void chkmin(T &a, const T &b) { a = a < b ? a : b; }
template<typename T> inline void chkmax(T &a, const T &b) { a = a > b ? a : b; }

const int MAXN = 505, MAXP = 10005;
int vis[MAXP], p[MAXN], q[MAXN], n = 500;
LL mp[MAXN][MAXN];
void judge(LL x, LL y) {
	if (x < y) swap(x, y);
	assert(x % y == 1);
}

int main() {
	int R = 0, C = n;
	for (int i = 2; i < MAXP; i++) if (!vis[i]) {
		if (R < n) p[R + 1] = p[R + 2] = i, R += 2;
		else if (C > 0) q[C] = q[C - 1] = i, C -= 2;
		for (int j = i + i; j < MAXP; j += i) vis[j] = 1;
	}
	p[0] = q[0] = p[n + 1] = q[n + 1] = 1;
	for (int i = 1; i <= n; i++)
	for (int j = 1; j <= n; j++) {
		LL cur = 0;
		if ((i + j) & 1) {
			cur = p[i] * q[j];
			if (~i & 1) cur <<= 1;
		} else {
			cur = (LL)p[i - 1] * p[i + 1] * q[j - 1] * q[j + 1] * 2;
			if (i & 1) cur <<= 1;
			++cur;
		}
		mp[i][j] = cur;
		assert(cur <= 1e15);
		if (i > 1) judge(mp[i][j], mp[i - 1][j]);
		if (j > 1) judge(mp[i][j], mp[i][j - 1]);
	}
	scanf("%d", &n);
	for (int i = 1; i <= n; i++, puts(""))
	for (int j = 1; j <= n; j++) printf("%lld ", mp[i][j]);
	return 0;
}