#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
// Khởi tạo ma trận N x N với giá trị ban đầu là 0
int matrix [N][N] = {0};
int Num = 1; // Biến Num để điền số thứ tự vào ma trận
int start = 0; // Điểm bắt đầu vòng lặp hiện tại
int end = N; // Điểm kết thúc vòng lặp hiện tại (ban đầu bằng N)
// Vòng lặp xoắn ốc điền các giá trị vào ma trận
while (start < end) {
// Điền hàng trên cùng từ trái sang phải
for (int i = start; i < end; i++) {
matrix[start][i] = Num++;
}
// Điền cột bên phải từ trên xuống dưới
for (int i = start + 1; i < end; i++) {
matrix[i][end - 1] = Num++;
}
// Điền hàng dưới cùng từ phải sang trái
for (int i = end - 2; i >= start; i--) {
matrix[end - 1][i] = Num++;
}
// Điền cột bên trái từ dưới lên trên
for (int i = end - 2; i > start; i--) {
matrix[i][start] = Num++;
}
// Di chuyển vùng xoắn ốc vào trong
start++;
end--;
}
// In ma trận
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << matrix[i][j] << " ";
}
cout << '\n';
}
return 0;
}