#include void solve(int N, int ans[][1001], int k) { if (N <= 0) return; else if (N == 1) { ans[1][1] = ++k; return; } else if (N == 2) { ans[1][1] = ++k; ans[2][2] = ++k; ans[1][2] = ++k; ans[2][1] = ++k; return; } int i; ans[1][1] = ++k; ans[N][N] = ++k; ans[1][N] = ++k; ans[N][1] = ++k; for (i = 2; i < N; i++) { if (i % 2 == 0) { ans[N][i] = ++k; ans[N-i+1][1] = ++k; } else { ans[N-i+1][1] = ++k; ans[N][i] = ++k; } } if (N % 2 == 0) { for (i = 2; i < N; i++) { if (i % 2 == 0) { ans[1][N-i+1] = ++k; ans[i][N] = ++k; } else { ans[i][N] = ++k; ans[1][N-i+1] = ++k; } } } else { for (i = 2; i < N; i++) { if (i % 2 == 0) { ans[i][N] = ++k; ans[1][N-i+1] = ++k; } else { ans[1][N-i+1] = ++k; ans[i][N] = ++k; } } } solve(N - 2, &(ans[1][1]), k); } int main() { int N; scanf("%d", &N); int i, j, ans[1001][1001]; solve(N, ans, 0); for (i = 1; i <= N; i++) { for (j = 1; j <= N; j++) printf("%d ", ans[i][j]); printf("\n"); } fflush(stdout); return 0; }