#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++;
}
//cout<<"ans="<<ans<<endl;
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;
}