#include <bits/stdc++.h>
using namespace std;
int a[110];
struct node {
  int l, r, len;
};
vector<node> p;
bool cmp(node x, node y) { return x.len < y.len; }
int main() {
  int n;
  while (scanf("%d", &n) != EOF) {
    p.clear();
    memset(a, 0, sizeof(a));
    int ans = 0, cnt0 = n / 2, cnt1 = n / 2, t = 0;
    if (n & 1) cnt1++;
    for (int i = 1; i <= n; i++) {
      scanf("%d", &a[i]);
      if (a[i] > 0) {
        if (a[i - 1] != 0 && a[i - 1] % 2 != a[i] % 2) ans++;
        if (a[i] & 1)
          cnt1--;
        else
          cnt0--;
        if (i - t > 1 && t > 0) p.push_back({t, i, i - t - 1});
        t = i;
      }
    }
    if (cnt1 + cnt0 == n) {
      if (n > 1)
        printf("1\n");
      else
        printf("0\n");
      continue;
    }
    sort(p.begin(), p.end(), cmp);
    for (int i = 0; i < p.size(); i++) {
      node tmp = p[i];
      if ((a[tmp.l] & 1) == (a[tmp.r] & 1)) {
        if (a[tmp.l] & 1) {
          if (cnt1 >= tmp.len)
            cnt1 -= tmp.len;
          else
            ans += 2;
        } else {
          if (cnt0 >= tmp.len)
            cnt0 -= tmp.len;
          else
            ans += 2;
        }
      } else
        ans++;
    }
    int x = 1;
    while (a[x] == 0 && x <= n) x++;
    if (x > 1 && x <= n) {
      if (a[x] & 1) {
        if (cnt1 >= x - 1)
          cnt1 -= (x - 1);
        else
          ans++;
      } else {
        if (cnt0 >= x - 1)
          cnt0 -= (x - 1);
        else
          ans++;
      }
    }
    x = n;
    while (a[x] == 0 && x >= 1) x--;
    if (x < n && x >= 1) {
      if (a[x] & 1) {
        if (cnt1 >= n - x)
          cnt1 -= (n - x);
        else
          ans++;
      } else {
        if (cnt0 >= n - x)
          cnt0 -= (n - x);
        else
          ans++;
      }
    }
    printf("%d\n", ans);
  }
  return 0;
}
