N = int(input()) ans = [['a'] * (N) for _ in range(N)] def check(t): i, j = t return 0 <= i < N and 0 <= j < N def tashi(t1, t2): return (t1[0] + t2[0], t1[1] + t2[1]) # 前が 'a' なら進む # そうでないなら 右に90度回転する(key +1 して %4) key = 0 vec = [ (0, 1), (1, 0), (0, -1), (-1, 0) ] i, j = 0, 0 for num in range(1, N*N + 1): ans[i][j] = str(num).zfill(3) nex = tashi((i, j), vec[key]) if check(nex) and ans[nex[0]][nex[1]] == 'a': i, j = nex else: key += 1 key %= 4 i, j = tashi((i, j), vec[key]) for a in ans: print(*a)