#include <bits/stdc++.h>
#define res register ll
#define ll long long 
#define N 1005
using namespace std;
ll a[N][N],p[N],n,tot,cnt=2e9;
bool ispri[N*100];
inline ll read(){
	res w=0,X=0;register char ch=getchar();
	while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
	while(isdigit(ch)){X=(X<<1)+(X<<3)+(ch^48);ch=getchar();}
	return w?-X:X;
}
int main(){
	n=read();
	for(res i=0;i<N;i++)
	  for(res j=0;j<N;j++)
	    a[i][j]=1;
	for(res i=2;p[0]<N-1;i++){
		if(!ispri[i]) p[++p[0]]=i;
		for(res j=1;j<=p[0]&&i*p[j]<N*100;j++){
			ispri[i*p[j]]=1;
			if(i%p[j]==0) break;
		}
	}
	puts("1");
	for(res i=1;i<=n;i++)
	  for(res j=1;j<=n;j++)
	    if((i+j)%2==0){
	      a[i][j]=p[(i+j)>>1];
	      tot=max(tot,i+j>>1);
	    }
	for(res i=1;i<=n;i++)
	  for(res j=1;j<=n;j++)
	    if((i-j)%2==0)
	      cnt=min(cnt,(i-j)/2);
	cnt=-cnt;
	for(res i=1;i<=n;i++)
	  for(res j=1;j<=n;j++)
	    if((i-j)%2==0)
	      a[i][j]*=p[cnt+tot+(i-j>>1)+1];
	for(res i=1;i<=n;i++)
	  for(res j=1;j<=n;j++)
	    if((i+j)&1)
	      a[i][j]=a[i-1][j]*a[i][j-1]*a[i+1][j]*a[i][j+1]+1;
	for(res i=1;i<=n;i++,puts(""))
	  for(res j=1;j<=n;j++)
	    printf("%lld ",a[i][j]);
	return 0;
}