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;

const int N = 10010;

typedef long long LL;

int flag[N], prime[N], pcnt;

inline void sieve() {
    for (int i = 2; i <= N - 10; i++) {
        if (!flag[i]) prime[++pcnt] = i;
        for (int j = 1; j <= pcnt && i * prime[j] <= N - 10; j++) {
            flag[i * prime[j]] = 1;
            if (i % prime[j] == 0) break;
        }
    }
}

LL G[510][510];

LL gcd(LL a, LL b) {
    return b ? gcd(b, a % b) : a;
}

inline LL lcm(LL a, LL b) {
    return a / gcd(a, b) * b;
}

template<typename... T>
inline LL lcm(LL a, T... b) {
    LL t = lcm(b...);
    return a / gcd(a, t) * t;
}

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