#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
int n;
int arr[105], cntz[105], dp[105][105][2];
int solve(int i, int even, int last);
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  memset(dp, -1, sizeof(dp));
  int cnt0 = 0, even, cnteven = 0;
  cin >> n;
  even = n / 2;
  for (int i = 0; i < n; i++) {
    cin >> arr[i];
    if (arr[i] != 0 && !(arr[i] & 1)) {
      cnteven++;
    }
  }
  even -= cnteven;
  for (int i = n - 1; i >= 0; i--) {
    if (i == n - 1) {
      cntz[i] = 0;
    } else {
      cntz[i] = cntz[i + 1];
    }
    if (arr[i] == 0) {
      cntz[i]++;
    }
  }
  cout << solve(0, even, 0) << '\n';
  return 0;
}
int solve(int i, int even, int last) {
  if (i == n) {
    return 0;
  }
  if (dp[i][even][last] != -1) {
    return dp[i][even][last];
  }
  if (arr[i] != 0) {
    if (i > 0) {
      return dp[i][even][last] =
                 ((arr[i] & 1) != last) + solve(i + 1, even, arr[i] & 1);
    } else {
      return dp[i][even][last] = solve(i + 1, even, arr[i] & 1);
    }
  } else {
    int odd = cntz[i] - even;
    if (i != 0) {
      if (odd > 0 && even > 0) {
        int tmp1 = (last != 1) + solve(i + 1, even, 1);
        int tmp2 = (last != 0) + solve(i + 1, even - 1, 0);
        return dp[i][even][last] = min(tmp1, tmp2);
      } else if (odd == 0) {
        return dp[i][even][last] = (last != 0) + solve(i + 1, even - 1, 0);
      } else if (even == 0) {
        return dp[i][even][last] = (last != 1) + solve(i + 1, even, 1);
      }
    } else {
      if (odd > 0 && even > 0) {
        int tmp1 = solve(i + 1, even, 1);
        int tmp2 = solve(i + 1, even - 1, 0);
        return dp[i][even][last] = min(tmp1, tmp2);
      } else if (odd == 0) {
        return dp[i][even][last] = solve(i + 1, even - 1, 0);
      } else if (even == 0) {
        return dp[i][even][last] = solve(i + 1, even, 1);
      }
    }
  }
}
