#include <bits/stdc++.h>
using namespace std;
const int maxn = 1520;
const int size = 0x3f3f3f3f;
int now = 1, n, a[110], dp[2][55][55][2], ji, ou;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = (x << 1) + (x << 3) + (ch ^ 48);
    ch = getchar();
  }
  return x * f;
}
int main() {
  n = read();
  ou = n / 2;
  ji = n - ou;
  for (int i = 1; i <= n; ++i) {
    a[i] = read();
    if (a[i]) a[i] % 2 ? --ji : --ou;
  }
  memset(dp, size, sizeof dp);
  dp[0][ji][ou][0] = 0;
  dp[0][ji][ou][1] = 0;
  for (int i = 1; i <= n; ++i) {
    if (a[i]) {
      for (int p = 0; p <= ji; ++p) {
        for (int q = 0; q <= ou; ++q) {
          dp[now][p][q][a[i] % 2] = min(dp[now ^ 1][p][q][a[i] % 2],
                                        dp[now ^ 1][p][q][1 - a[i] % 2] + 1);
          dp[now][p][q][1 - a[i] % 2] = size;
        }
      }
    } else {
      for (int p = 0; p <= ji; ++p) {
        for (int q = 0; q <= ou; ++q) {
          if (p < ji)
            dp[now][p][q][1] =
                min(dp[now ^ 1][p + 1][q][1], dp[now ^ 1][p + 1][q][0] + 1);
          if (q < ou)
            dp[now][p][q][0] =
                min(dp[now ^ 1][p][q + 1][0], dp[now ^ 1][p][q + 1][1] + 1);
        }
      }
    }
    now ^= 1;
  }
  printf("%d\n", min(dp[now ^ 1][0][0][0], dp[now ^ 1][0][0][1]));
  return 0;
}
