#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 105;
int dp[MAX_N][2 * MAX_N][2];
int a[MAX_N];
bool used[MAX_N];
void Q(int &x, int y) {
  if (x == -1)
    x = y;
  else if (y < x)
    x = y;
}
int main() {
  int offset = 105;
  int odd = 0, even = 0, z = 0;
  memset(dp, -1, sizeof dp);
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    used[a[i]] = true;
  }
  for (int i = 1; i <= n; i++)
    if (!used[i])
      if (i & 1)
        odd++;
      else
        even++;
  dp[0][offset][1] = dp[0][offset][0] = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < 2 * MAX_N; j++) {
      for (int k = 0; k < 2; k++) {
        if (dp[i][j][k] == -1) continue;
        if (a[i] != 0) {
          Q(dp[i + 1][j][a[i] & 1], dp[i][j][k] + ((a[i] & 1) != k));
        } else {
          int p = (j - offset + z) / 2, n = (z + offset - j) / 2;
          if (p < odd) Q(dp[i + 1][j + 1][1], dp[i][j][k] + 1 - (k & 1));
          if (n < even) Q(dp[i + 1][j - 1][0], dp[i][j][k] + (k & 1));
        }
      }
    }
    if (a[i] == 0) z++;
  }
  int ans = 1000;
  for (int j = 0; j < 2 * MAX_N; j++)
    for (int k = 0; k < 2; k++)
      if (dp[n][j][k] != -1) ans = min(ans, dp[n][j][k]);
  cout << ans << endl;
}
