← Home
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)
}