#include #include #include #include #include #include #include #include using namespace std; #define GET_ARG(a,b,c,F,...) F #define REP3(i,s,e) for (i = s; i <= e; i++) #define REP2(i,n) REP3 (i,0,(int)(n)-1) #define REP(...) GET_ARG (__VA_ARGS__,REP3,REP2) (__VA_ARGS__) #define RREP3(i,s,e) for (i = s; i >= e; i--) #define RREP2(i,n) RREP3 (i,(int)(n)-1,0) #define RREP(...) GET_ARG (__VA_ARGS__,RREP3,RREP2) (__VA_ARGS__) #define DEBUG(x) cerr << #x ": " << x << endl typedef long long ll; constexpr int INF = 1e8; constexpr int MOD = 1e9+7; constexpr int ESP = 1e-9; constexpr double PI = acos(-1); int ans[30][30]; int dxy[4] = {0,1,0,-1}; int main(void) { int n; cin >> n; int x = 0, y = 0, dir = 0, num; REP (num,1,n*n) { ans[y][x] = num; int ny = y + dxy[dir]; int nx = x + dxy[(dir+1)%4]; if (nx < 0 || nx >= n || ny < 0 || ny >= n || ans[ny][nx] > 0) { dir = (dir + 1) % 4; ny = y + dxy[dir]; nx = x + dxy[(dir+1)%4]; } x = nx; y = ny; } REP (y,n) REP (x,n) { cout << setfill('0') << setw(3); cout << ans[y][x] << (x < n-1 ? ' ' : '\n'); } return 0; }