#include<bits/stdc++.h>

#define y1 dmytxdy
#define fi first
#define se second
#define mp make_pair

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef long double ld;

template <typename T> bool chkmin(T &x,T y){return x>y?x=y,1:0;}
template <typename T> bool chkmax(T &x,T y){return x<y?x=y,1:0;}

int readint(){
	int x=0,f=1; char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}

const int N=10000;
int n,tot;
ll a[505][505];
bool fl[10005];
int prm[10005];

ll gcd(ll x,ll y){return y==0?x:gcd(y,x%y);}
ll lcm(ll x,ll y){return x==0?y:y==0?x:x/gcd(x,y)*y;}

void getprime(){
	fl[1]=1;
	for(int i=2;i<=N;i++){
		if(!fl[i]) prm[++tot]=i;
		for(int j=1;j<=tot&&i*prm[j]<=N;j++){
			fl[i*prm[j]]=1;
			if(i%prm[j]==0) break;
		}
	}
}

int main(){
	getprime();
	n=readint();
	if(n==2) return printf("4 7\n23 10\n"),0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if((i+j)&1) continue;
			a[i][j]=prm[(i+j)/2]*prm[n+(i-j+n+1)/2];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(!((i+j)&1)) continue;
			a[i][j]=lcm(lcm(a[i-1][j],a[i][j-1]),lcm(a[i+1][j],a[i][j+1]))+1;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++) printf("%lld ",a[i][j]);
		printf("\n");
	}
	return 0;
}