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 <iostream>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <queue>
#include <set>
#include <map>

using namespace std;
typedef long long ll;

bool isPrime[100001];
vector<ll> p, nonPrimeOdd;
void init(){
    for(int i = 2; i <= 10000; i++) isPrime[i] = true;
    for(int i = 2; i <= 10000; i++){
        if(isPrime[i]){
            if(i != 2) p.push_back(i);
            for(int j = 2; i*j <= 10000; j++) isPrime[i*j] = false;
        }
    }
    for(int i = 2; i <= 10000; i++){
        if(i%2 == 1 && !isPrime[i]) nonPrimeOdd.push_back(i);
    }
}

ll ans[500][500];

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout << setprecision(10) << fixed;
    int N;
    cin >> N;
    init();
    for(int i = 0; i < N; i++){
        for(int j = 0; j < N; j++){
            if((i-j)%2 == 0){
                int k = (i+j)/2;
                int m = (i-j)/2+N/2;
                ans[i][j] = p[m]*p[N+k];
            }else{
                int k = (i+j)/2;
                int m = (i-j-1)/2+N/2;
                // cout << i << ' ' << j << ' ' << k << ' ' << m << endl;
                ans[i][j] = p[m]*p[m+1]*p[N+k]*p[N+k+1]+1;
            }
        }
    }
    for(int i = 0; i < N; i++){
        for(int j = 0; j < N; j++){
            cout << ans[i][j] << ' ';
        }
        cout << endl;
    }
}