#include #include using namespace std; using Coord = pair; constexpr int MAX_N = 45; int n; int magic_square[MAX_N][MAX_N]; Coord next_coord(Coord current_coord) { Coord next_coord = current_coord; next_coord.first = (next_coord.first + n - 1) % n; next_coord.second = (next_coord.second + 1) % n; if ((current_coord.first == 0 && current_coord.second == n - 1) || magic_square[next_coord.first][next_coord.second] != 0) { return {(current_coord.first + 1) % n, current_coord.second}; } return next_coord; } void print_magic_square(ostream& os = cout) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { os << magic_square[i][j] << " "; } os << endl; } os << endl; } void fill_magic_square() { Coord current_coord = {0, (n - 1) / 2}; for (int num = 1; num <= n * n; num++) { assert(magic_square[current_coord.first][current_coord.second] == 0); magic_square[current_coord.first][current_coord.second] = num; current_coord = next_coord(current_coord); // print_magic_square(clog); } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n; n = 2 * n - 1; fill_magic_square(); print_magic_square(); return 0; }