#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
void vrikodara(long long n = 12) {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << setprecision(n) << fixed;
}
long long lb = 100000;
void solve() {
  long long n;
  cin >> n;
  set<long long> s, so, se;
  for (long long i = 1; i <= n; i++) s.insert(i);
  vector<long long> p(n + 2);
  for (long long i = 1; i <= n; i++) {
    cin >> p[i];
    if (p[i]) s.erase(p[i]);
  }
  if (n == 1) {
    cout << "0";
    return;
  }
  for (auto i : s)
    if (i & 1)
      so.insert(i);
    else
      se.insert(i);
  set<pair<long long, long long> > sso, sse;
  for (long long i = 1; i <= n; i++) {
    if (!p[i]) {
      if (!p[i - 1]) continue;
      long long x = i, y = i;
      while (y <= n && !p[y]) y++;
      if (y > n) break;
      if (p[x - 1] & 1 && p[y] & 1) {
        sso.insert({y - x, x});
      } else if (p[x - 1] % 2 == 0 && p[y] % 2 == 0) {
        sse.insert({y - x, x});
      }
      i = y;
    }
  }
  if (s.size() >= n - 1) {
    cout << "1";
    return;
  }
  while (!sso.empty() && !so.empty()) {
    auto q = *sso.begin();
    long long x = q.second;
    long long y = q.first + q.second;
    if (q.first > so.size()) break;
    sso.erase(q);
    while (x < y && !so.empty()) {
      long long j = *so.begin();
      so.erase(j);
      p[x] = j;
      x++;
    }
    if (x < y) {
      sso.insert({y - x, x});
      break;
    }
  }
  while (!sse.empty() && !se.empty()) {
    auto q = *sse.begin();
    long long x = q.second, y = q.first + q.second;
    if (q.first > se.size()) break;
    sse.erase(q);
    while (x < y && !se.empty()) {
      long long j = *se.begin();
      se.erase(j);
      p[x] = j;
      x++;
    }
    if (x < y) {
      sse.insert({y - x, x});
      break;
    }
  }
  long long d1 = 1;
  while (d1 <= n && !p[d1]) d1++;
  d1--;
  long long d2 = n;
  while (d2 > 0 && !p[d2]) d2--;
  if (d1 && d2 < n) {
    if (d1 > n - d2) {
      d2++;
      if (p[d2 - 1] & 1) {
        while (!so.empty() && d2 <= n) {
          long long j = *so.begin();
          so.erase(j);
          p[d2] = j;
          d2++;
        }
      } else {
        while (!se.empty() && d2 <= n) {
          long long j = *se.begin();
          se.erase(j);
          p[d2] = j;
          d2++;
        }
      }
    } else {
      if (p[d1 + 1] & 1) {
        while (!so.empty() && d1 > 0) {
          long long j = *so.begin();
          so.erase(j);
          p[d1] = j;
          d1--;
        }
      } else {
        while (!se.empty() && d1 > 0) {
          long long j = *se.begin();
          se.erase(j);
          p[d1] = j;
          d1--;
        }
      }
    }
  }
  d1 = 1;
  while (d1 <= n && !p[d1]) d1++;
  d1--;
  d2 = n;
  while (d2 > 0 && !p[d2]) d2--;
  d2++;
  if (p[1] == 0) {
    if (p[d1 + 1] & 1) {
      while (!so.empty() && d1 > 0) {
        long long j = *so.begin();
        so.erase(j);
        p[d1] = j;
        d1--;
      }
    } else {
      while (!se.empty() && d1 > 0) {
        long long j = *se.begin();
        se.erase(j);
        p[d1] = j;
        d1--;
      }
    }
  }
  if (p[n] == 0) {
    if (p[d2 - 1] & 1) {
      while (!so.empty() && d2 <= n) {
        long long j = *so.begin();
        so.erase(j);
        p[d2] = j;
        d2++;
      }
    } else {
      while (!se.empty() && d2 <= n) {
        long long j = *se.begin();
        se.erase(j);
        p[d2] = j;
        d2++;
      }
    }
  }
  for (long long i = 1; i <= n && !so.empty() && !se.empty(); i++) {
    if (!p[i]) {
      if (p[i - 1] & 1) {
        long long j = *so.begin();
        so.erase(j);
        p[i] = j;
      } else {
        long long j = *se.begin();
        se.erase(j);
        p[i] = j;
      }
    }
  }
  long long i = 1;
  for (auto j : se) {
    while (p[i] && i <= n) i++;
    p[i] = j;
  }
  for (auto j : so) {
    while (p[i] && i <= n) i++;
    p[i] = j;
  }
  long long ans = 0;
  for (long long i = 2; i <= n; i++) {
    if (p[i] % 2 != p[i - 1] % 2) ans++;
  }
  cout << ans;
}
int32_t main() {
  vrikodara();
  long long t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
