#include <bits/stdc++.h>
using namespace std;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
int dx8[] = {0, 0, 1, 1, 1, -1, -1, -1};
int dy8[] = {1, -1, -1, 0, 1, -1, 0, 1};
int kx8[] = {1, 1, 2, 2, -1, -1, -2, -2};
int ky8[] = {2, -2, 1, -1, 2, -2, 1, -1};
long long dp[105][105][105][3];
int a[105], n;
int vis[105];
long long dpcall(int id, int ev, int od, int ki) {
  if (id == n) return 0;
  long long &ret = dp[id][ev][od][ki];
  if (~ret) return ret;
  ret = 2134567891;
  if (a[id]) {
    long long cost = 0;
    if (a[id] == 1 && ki == 2) cost = 1;
    if (a[id] == 2 && ki == 1) cost = 1;
    return ret = cost + dpcall(id + 1, ev, od, a[id]);
  }
  if (ev) {
    long long cost = 0;
    if (ki == 1) cost = 1;
    ret = min(ret, cost + dpcall(id + 1, ev - 1, od, 2));
  }
  if (od) {
    long long cost = 0;
    if (ki == 2) cost = 1;
    ret = min(ret, cost + dpcall(id + 1, ev, od - 1, 1));
  }
  return ret;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  int ev = 0, od = 0;
  for (int i = 0; i < (n); i++) {
    cin >> a[i];
    vis[a[i]] = 1;
    if (a[i] % 2)
      a[i] = 1;
    else if (a[i])
      a[i] = 2;
  }
  for (int i = 1; i <= n; i++) {
    if (!vis[i])
      if (i % 2 == 0)
        ev++;
      else if (!vis[i])
        od++;
  }
  memset((dp), -1, sizeof(dp));
  cout << dpcall(0, ev, od, 0) << endl;
  return 0;
}
