package main

func generateMatrix(n int) [][]int {
	res := make([][]int, n)
	for i := range res {
		res[i] = make([]int, n)
	}
	cnt := 1
	x, y := 0, 0
	for l := n; l > 0; l -= 2 {
		if l == 1 {
			res[y][x] = cnt
			return res
		}
		for dir := 0; dir < 4; dir++ {
			var xSpeed, ySpeed int
			switch dir {
			case 0:
				xSpeed, ySpeed = 1, 0
			case 1:
				xSpeed, ySpeed = 0, 1
			case 2:
				xSpeed, ySpeed = -1, 0
			default:
				xSpeed, ySpeed = 0, -1
			}
			for i := 0; i < l-1; i, cnt = i+1, cnt+1 {
				res[y][x] = cnt
				x, y = x+xSpeed, y+ySpeed
			}
		}
		x, y = x+1, y+1
	}
	return res
}

/* func main() {
	fmt.Println(generateMatrix(0))
	fmt.Println(generateMatrix(1))
	fmt.Println(generateMatrix(2))
	fmt.Println(generateMatrix(3))
	fmt.Println(generateMatrix(4))
} */