```go
package main
import (
"bufio"
"fmt"
"os"
)
func phi(n int) int {
result := n
for i := 2; i*i <= n; i++ {
if n%i == 0 {
for n%i == 0 {
n /= i
}
result -= result / i
}
}
if n > 1 {
result -= result / n
}
return result
}
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n int
fmt.Fscan(in, &n)
var s string
fmt.Fscan(in, &s)
divs := make([]int, 0)
for i := 1; i*i <= n; i++ {
if n%i == 0 {
divs = append(divs, i)
if i*i != n {
divs = append(divs, n/i)
}
}
}
counts := make([]int, n)
ans := 0
for _, g := range divs {
for i := 0; i < g; i++ {
counts[i] = 0
}
idx := 0
for i := 0; i < n; i++ {
if s[i] == '1' {
counts[idx] ^= 1
}
idx++
if idx == g {
idx = 0
}
}
valid := true
for i := 0; i < g; i++ {
if counts[i] != 0 {
valid = false
break
}
}
if valid {
ans += phi(n / g)
}
}
fmt.Fprintln(out, ans)
}
```