#include <bits/stdc++.h>   using namespace std;   void solve() {     long long n;     cin >> n;     if (n == 0 || n == 1) {       cout << 0 << endl;       return;     }     long long a[n];     vector<int> pos;     long long even = n / 2, odds = n - even;     for (int i = 0; i < n; i++) {       cin >> a[i];       if (a[i] != 0) {         if (a[i] & 1)           odds--;         else           even--;         pos.push_back(i);       }     }     if (pos.size() == 0) {       cout << 1 << endl;       return;     }     vector<pair<int, int>> good;     int bad = 0;     for (int i = 1; i < pos.size(); ++i) {       if (pos[i] - pos[i - 1] != 1) {         if (a[pos[i]] % 2 == a[pos[i - 1]] % 2) {           good.push_back({pos[i], pos[i - 1]});         }       }       if (a[pos[i]] % 2 != a[pos[i - 1]] % 2) bad++;     }     sort(good.begin(), good.end(), [&](pair<int, int> a, pair<int, int> b) {       return a.first - a.second < b.first - b.second;     });     long long ans = bad;     for (auto i : good) {       int k = i.first - i.second - 1;       if (a[i.first] & 1 && odds >= k)         odds -= k;       else if (!(a[i.first] & 1) && even >= k)         even -= k;       else         ans += 2;     }     if (a[0] == 0) {       int cnt = 0;       while (a[cnt] == 0) cnt++;       if (a[cnt] & 1 && odds >= cnt)         odds -= cnt;       else if (!(a[cnt] & 1) && even >= cnt)         even -= cnt;       else         ans++;     }     if (a[n - 1] == 0) {       int cnt = 0, i = n - 1;       while (a[i] == 0) cnt++, --i;       if (!(a[i] & 1 && odds >= cnt || !(a[i] & 1) && even >= cnt)) ans++;     }     cout << ans << endl;   }   int main() {     ios::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     solve();   }   