#include "bits/stdc++.h" #define ALL(a) (a).begin(),(a).end() #define SORT(c) sort((c).begin(),(c).end()) #define DESCSORT(c) sort(c.begin(), c.end(), greater()) using namespace std; using LL = long long int; using LD = long double; using pii = pair; using pll = pair; using pdd = pair; using vi = vector; using vvi = vector; using vvvi = vector; using vl = vector; using vvl = vector; using vvvl = vector; using vd = vector; using vvd = vector; using vs = vector; using vb = vector; using vvb = vector; const int INF = (1 << 30) - 1; const LL INF64 = ((LL)1 << 62) - 1; const double PI = 3.1415926535897932384626433832795; const int dy[] = { 0, 1, 0, -1 }; const int dx[] = { 1, 0, -1, 0 }; int gcd(int x, int y) { return y ? gcd(y, x % y) : x; } LL gcd(LL x, LL y) { return y ? gcd(y, x % y) : x; } vvi hindu(int n, vvi table) { int x = n / 2, y = 0; int cnt = 1; while (cnt <= n * n) { table[y][x] = cnt; cnt++; x++; y--; if (x == n) x = 0; if (y < 0) y = n - 1; if (table[y][x]) { x = (x + n - 1) % n; y = (y + 2) % n; } } return table; } vvi diagonal(int n, vvi table) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { int x = i % 4, y = j % 4; if (x == y || 3 - x == y) { table[i][j] = i * n + j + 1; } else { table[i][j] = n * n - i * n - j; } } } return table; } vvi lux(int n, vvi table) { vvi tmpTable(n / 2, vi(n / 2)); tmpTable = hindu(n / 2, tmpTable); for (int i = 0; i < n / 2; i++) { for (int j = 0; j < n / 2; j++) { tmpTable[i][j]--; tmpTable[i][j] *= 4; if (((i == (n / 4) && (j == (n / 4))) || ((i == (n / 4 + 1)) && (j != (n / 4)))) || ((i == (n / 4)) && (j == (n / 4)))) { // U table[i * 2][j * 2] = tmpTable[i][j] + 1; table[i * 2 + 1][j * 2] = tmpTable[i][j] + 2; table[i * 2][j * 2 + 1] = tmpTable[i][j] + 4; table[i * 2 + 1][j * 2 + 1] = tmpTable[i][j] + 3; } else if (i > (n / 4 + 1)) { // X table[i * 2][j * 2] = tmpTable[i][j] + 1; table[i * 2 + 1][j * 2] = tmpTable[i][j] + 3; table[i * 2][j * 2 + 1] = tmpTable[i][j] + 4; table[i * 2 + 1][j * 2 + 1] = tmpTable[i][j] + 2; } else { // L table[i * 2][j * 2] = tmpTable[i][j] + 4; table[i * 2 + 1][j * 2] = tmpTable[i][j] + 2; table[i * 2][j * 2 + 1] = tmpTable[i][j] + 1; table[i * 2 + 1][j * 2 + 1] = tmpTable[i][j] + 3; } } } return table; } int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vvi magic_square(n, vi(n)); if (n % 2 == 1) { magic_square = hindu(n, magic_square); } else if (n % 4 == 0) { magic_square = diagonal(n, magic_square); } else { magic_square = lux(n, magic_square); } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << magic_square[i][j] << " "; } cout << endl; } return 0; }