//              +-- -- --++-- +-In the name of ALLAH-+ --++-- -- --+              \\

#include <bits/stdc++.h>

#define int ll

#define F first
#define S second
#define _sz(x) (int)x.size()

using namespace std ;
using ll = long long ;
using ld = long double ;
using pii = pair <int , int> ;

int const N = 500 + 20 , M = 3e4 + 20 ;
int n , a[N][N] ;
bool np[M] ;
vector <int> vec ;

int gcd (int a , int b) {
	if (!b) return a ;
	return gcd(b , a % b) ;
}

inline void add (int &a , int b) {
	a = a / gcd(a , b) * b ;
}

int32_t main(){
	ios::sync_with_stdio(false) , cin.tie(0) , cout.tie(0) ;

	cin >> n ;

	if (n == 2) {
		cout << "4 7\n23 10\n" ;
		return 0 ;
	}

	np[0] = np[1] = 1 ;
	for (int i = 2 ; i < M ; i ++) {
		if (np[i]) continue ;

		vec.push_back(i) ;

		for (int j = 2 * i ; j < M ; j += i) np[j] = 1 ;
	}

	for (int i = 0 ; i < n ; i ++)
		for (int j = 0 ; j < n ; j ++)
			if (((i + j) & 1) == 0) 
				a[i][j] = vec[(i + j) >> 1] * vec[((i - j + n) >> 1) + n] ;

	for (int i = 0 ; i < n ; i ++)
		for (int j = 0 ; j < n ; j ++)
			if (((i + j) & 1) == 1) {
				a[i][j] = 1 ;
				if (i > 0) add(a[i][j] , a[i - 1][j]) ;
				if (i < n - 1) add(a[i][j] , a[i + 1][j]) ;
				if (j > 0) add(a[i][j] , a[i][j - 1]) ;
				if (j < n - 1) add(a[i][j] , a[i][j + 1]) ;
				a[i][j] += 1 ;
			}

	for (int i = 0 ; i < n ; i ++) {
		for (int j = 0 ; j < n ; j ++) cout << a[i][j] << ' ' ;
		cout << '\n' ;
	}
}