Problem:
Score : 1100 points

Problem Statement

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}

Sample Input 1

2

Sample Output 1

4 7
23 10

For any two elements x and y that are vertically or horizontally adjacent, {\rm max}(x,y) {\rm mod} {\rm min}(x,y) is always 3.

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define SF scanf
#define PF printf
#define MAXN 510
#define MAXM 10000
using namespace std;
typedef long long ll;
int n,cnt;
ll primes[MAXM];
ll a[MAXN][MAXN];
bool isprime[MAXM+10];
void prepare(){
	for(int i=2;i<=MAXM;i++){
		if(isprime[i]==0)
			primes[++cnt]=i;	
		for(int j=1;i*primes[j]<=MAXM;j++){
			isprime[i*primes[j]]=1;
			if(i%primes[j]==0)
				break;	
		}
	}
}
ll gcd(ll x,ll y){
	if(y==0)
		return x;
	return gcd(y,x%y);	
}
ll lcm(ll x,ll y){
	if(x==0)
		return y;
	if(y==0)
		return x;
	ll g=gcd(x,y);
	return x/g*y;
}
int main(){
	prepare();
	SF("%d",&n);
	int now=1;
	if(n==2){
		PF("4 7\n23 10\n");
		return 0;	
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(i%2==j%2){
				int nowx=(i+j)/2;
				int nowy=(i-j+n)/2+n+1;
				a[i][j]=primes[nowx]*primes[nowy];
			}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(i%2!=j%2){
				a[i][j]=lcm(lcm(a[i-1][j],a[i][j-1]),lcm(a[i+1][j],a[i][j+1]))+1ll;	
			}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)
			PF("%lld ",a[i][j]);
		PF("\n");
	}
}