package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n int
fmt.Fscan(in, &n)
p := make([]int, n)
existingOdd := 0
for i := 0; i < n; i++ {
fmt.Fscan(in, &p[i])
if p[i]%2 == 1 {
existingOdd++
}
}
missingOdd := (n+1)/2 - existingOdd
const INF = int(1e9)
var dp [101][101][2]int
for i := 0; i <= n; i++ {
for j := 0; j <= n; j++ {
dp[i][j][0] = INF
dp[i][j][1] = INF
}
}
if p[0] == 0 {
dp[1][0][0] = 0
dp[1][1][1] = 0
} else {
dp[1][0][p[0]%2] = 0
}
for i := 1; i < n; i++ {
for j := 0; j <= missingOdd; j++ {
for prev := 0; prev < 2; prev++ {
cur := dp[i][j][prev]
if cur == INF {
continue
}
if p[i] == 0 {
val := cur
if prev != 0 {
val++
}
if val < dp[i+1][j][0] {
dp[i+1][j][0] = val
}
if j+1 <= missingOdd {
val = cur
if prev != 1 {
val++
}
if val < dp[i+1][j+1][1] {
dp[i+1][j+1][1] = val
}
}
} else {
par := p[i] % 2
val := cur
if prev != par {
val++
}
if val < dp[i+1][j][par] {
dp[i+1][j][par] = val
}
}
}
}
}
ans := dp[n][missingOdd][0]
if dp[n][missingOdd][1] < ans {
ans = dp[n][missingOdd][1]
}
fmt.Fprintln(out, ans)
}