n = int(input()) RIGHT, DOWN, LEFT, UP = range(4) matrix = [[0 for _ in range(n)] for _ in range(n)] current = [0, 0] direction = RIGHT for i in range(1, n ** 2 + 1): matrix[current[1]][current[0]] = i if direction == RIGHT: if current[0] + 1 >= n or matrix[current[1]][current[0] + 1] != 0: direction = DOWN current[1] += 1 else: current[0] += 1 elif direction == DOWN: if current[1] + 1 >= n or matrix[current[1] + 1][current[0]] != 0: direction = LEFT current[0] -= 1 else: current[1] += 1 elif direction == LEFT: if current[0] - 1 < 0 or matrix[current[1]][current[0] - 1] != 0: direction = UP current[1] -= 1 else: current[0] -= 1 elif direction == UP: if current[1] - 1 < 0 or matrix[current[1] - 1][current[0]] != 0: direction = RIGHT current[0] += 1 else: current[1] -= 1 # Переводим все числа в строки и делаем их необходимой длины, чтобы вывод был наглядным # Длина, до которой дополняем все числа, точно будет равна длине самого большого числа в матрице maxlen = len(str(n ** 2)) for row in matrix: print(*map(lambda num: str(num).rjust(maxlen, ' '), row))