#include <iostream> using namespace std; const int N = 1000; int a[N][N]; void build(int a[N][N], int n) // No solution when n = 2 { int i, j, k, nn = n * n, m = n / 2, mm = m * m; for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) a[i][j] = 0; if (n == 2) return; if (n % 2 == 1) { for (i = 0, j = n / 2, k = 1; k <= nn; ++k) { a[i][j] = k; if (!a[(i + n - 1) % n][(j + 1) % n]) { i = (i + n - 1) % n; j = (j + 1) % n; } else i = (i + 1) % n; } } else if (n % 4 == 0) { for (k = 0, i = 0; i < n; ++i) for (j = 0; j < n; ++j) { a[i][j] = ++k; if (i % 4 == j % 4 || i % 4 + j % 4 == 3) a[i][j] = nn + 1 - a[i][j]; } } else if (n % 4 == 2) { for (i = 0, j = m / 2, k = 0; k < mm; ++k) { if ((i <= m / 2 && !(i == m / 2 && j == m / 2)) || (i == m / 2 + 1 && j == m / 2)) // L { a[i * 2 ][j * 2 + 1] = k * 4 + 1; a[i * 2 + 1 ][j * 2] = k * 4 + 2; a[i * 2 + 1 ][j * 2 + 1] = k * 4 + 3; a[i * 2 ][j * 2] = k * 4 + 4; } else if (i > m / 2 + 1) // X { a[i * 2 ][j * 2] = k * 4 + 1; a[i * 2 + 1 ][j * 2 + 1] = k * 4 + 2; a[i * 2 + 1 ][j * 2] = k * 4 + 3; a[i * 2 ][j * 2 + 1] = k * 4 + 4; } else // U { a[i * 2 ][j * 2 ] = k * 4 + 1; a[i * 2 + 1 ][j * 2 ] = k * 4 + 2; a[i * 2 + 1 ][j * 2 + 1 ] = k * 4 + 3; a[i * 2 ][j * 2 + 1 ] = k * 4 + 4; } if (!a[(i + m - 1) % m * 2][(j + 1) % m * 2]) i = (i + m - 1) % m, j = (j + 1) % m; else i = (i + 1) % m; } } } bool check(int a[N][N], int n) { int i, j, sum, m, nn = n * n; static bool flag[N * N]; memset(flag, 0, sizeof(bool) * nn); for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) flag[a[i][j] - 1] = true; for (i = 0; i < nn; ++i) if (!flag[i]) return false; m = 0; for (i = 0; i < n; ++i) m += a[i][i]; sum = 0; for (i = 0; i < n; ++i) sum += a[i][n - 1 - i]; if (sum != m) return false; for (i = 0; i < n; ++i) { sum = 0; for (j = 0; j < n; ++j) sum += a[i][j]; if (sum != m) return false; } for (j = 0; j < n; ++j) { sum = 0; for (i = 0; i < n; ++i) sum += a[i][j]; if (sum != m) return false; } return true; } int main() { int n, i, j; while (scanf("%d", &n) != EOF) { build(a, n); cout << "size " << n << endl; for (i = 0; i < n; ++i) { for (j = 0; j < n; ++j) cout << a[i][j] << " "; cout << endl; } if (check(a, n)) cout << "YES" << endl; else cout << "NO" << endl; } return 0; }