#include <bits/stdc++.h>
using namespace std;
int mod(string s, int a) {
  int ans = 0;
  for (int i = 0; i < s.length(); i++) ans = (ans * 10 + (int)s[i] - '0') % a;
  return ans;
}
long long min(long long x, long long y) {
  if (x < y) return x;
  return y;
}
long long max(long long x, long long y) {
  if (x > y) return x;
  return y;
}
long long power(long long x, unsigned long long y) {
  if (y == 0)
    return 1;
  else if (y % 2 == 0)
    return power(x, y / 2) * power(x, y / 2);
  else
    return x * power(x, y / 2) * power(x, y / 2);
}
long long hcf(long long a, long long b) {
  if (b == 0) return a;
  return hcf(b, a % b);
}
long long n;
vector<long long> v(105);
long long dp[105][2][105][105];
long long f(long long ind, long long prev, long long odd, long long even) {
  if (dp[ind][prev][odd][even] != -1) return dp[ind][prev][odd][even];
  if (ind >= n) return 0;
  long long mn = 999999999999999999;
  if (v[ind] == 0) {
    if (prev) {
      if (odd) mn = min(mn, f(ind + 1, 1, odd - 1, even));
      if (even) mn = min(mn, 1 + f(ind + 1, 0, odd, even - 1));
    } else {
      if (even) mn = min(mn, f(ind + 1, 0, odd, even - 1));
      if (odd) mn = min(mn, 1 + f(ind + 1, 1, odd - 1, even));
    }
  } else {
    if (prev == v[ind] % 2)
      mn = min(mn, f(ind + 1, v[ind] % 2, odd, even));
    else
      mn = min(mn, 1 + f(ind + 1, v[ind] % 2, odd, even));
  }
  return dp[ind][prev][odd][even] = mn;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  long long TT = 1;
  while (TT--) {
    long long i, odd = 0, even = 0, ans = 999999999999999999;
    cin >> n;
    even = n / 2;
    odd = n / 2;
    if (n % 2) odd++;
    for (i = 0; i < n; i++) {
      cin >> v[i];
      if (v[i]) {
        if (v[i] % 2)
          odd--;
        else
          even--;
      }
    }
    memset(dp, -1, sizeof(dp));
    if (v[0])
      ans = f(1, v[0] % 2, odd, even);
    else
      ans = min(f(1, 0, odd, even - 1), f(1, 1, odd - 1, even));
    cout << ans;
  }
}
