#include <bits/stdc++.h>
using namespace std;
const long double EPS = 1e-18;
const double DEPS = 1e-9;
const long double PI = 3.141592653589793238;
const long long MOD = 998244353;
const int N = (int)(1e6) + 10;
void inp() {}
void out() {}
long long gcd(long long fx, long long fy) {
  if (!fy) return fx;
  return gcd(fy, fx % fy);
}
inline void fill(int* ar, int sz, int val) {
  for (int i = 0; i < sz; i++) {
    ar[i] = val;
  }
}
int n, a[102], dp[101][101][101][2];
int rec(int idx, int odd, int even, bool t) {
  if (odd < 0 || even < 0) return 1e9;
  if (idx == n) return 0;
  int& dp = ::dp[idx][odd][even][t];
  if (dp != -1) return dp;
  if (a[idx]) {
    return dp = rec(idx + 1, odd, even, a[idx] % 2) +
                (idx && (a[idx - 1] % 2 != a[idx] % 2));
  }
  a[idx] = 2;
  dp = rec(idx + 1, odd, even - 1, 0) + (idx && a[idx - 1] % 2);
  a[idx] = 1;
  dp = min(rec(idx + 1, odd - 1, even, 1) + (idx && (a[idx - 1] % 2 == 0)), dp);
  a[idx] = 0;
  return dp;
}
int main() {
  inp();
  cin >> n;
  memset(dp, -1, sizeof(dp));
  int e = n / 2, o = (n + 1) / 2;
  for (int i = 0; i < n; i++) {
    scanf("%d", a + i);
    if (a[i]) {
      o -= a[i] % 2;
      e -= !(a[i] % 2);
    }
  }
  cout << rec(0, o, e, 0);
}
