```go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
n, _ := strconv.Atoi(strings.TrimSpace(scanner.Text()))
scanner.Scan()
parts := strings.Fields(scanner.Text())
a := make([]int, n)
for i := 0; i < n; i++ {
a[i], _ = strconv.Atoi(parts[i])
}
d := make([]int, n)
d[0] = a[0]
for i := 1; i < n; i++ {
d[i] = a[i] - a[i-1]
}
var res []int
for k := 1; k <= n; k++ {
valid := true
for i := 0; i+k < n; i++ {
if d[i] != d[i+k] {
valid = false
break
}
}
if valid {
res = append(res, k)
}
}
fmt.Println(len(res))
for i, v := range res {
if i > 0 {
fmt.Print(" ")
}
fmt.Print(v)
}
fmt.Println()
}
```