#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define N 10010
int n,m,t,a[N],f[N][5][5];
inline int odd(int x){
return x&1;
}
inline int move(int x,int y){
if(x==y) return 1;
if(!x||!y) return 2;
if(odd(x)==odd(y)) return 4;
return 3;
}
int main(){
memset(f,63,sizeof f);
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",a+i);
f[0][0][0]=0;//注意从0开始枚举,因为一开始在0格子上
for(int i=1;i<=n;i++){
for(int j=0;j<=4;j++){
for(int k=0;k<=4;k++){
f[i][j][a[i]]=min(f[i][j][a[i]],f[i-1][j][k]+move(a[i],k));
f[i][a[i]][k]=min(f[i][a[i]][k],f[i-1][j][k]+move(a[i],j));
}
}
}
int ans=0x3f3f3f3f;
for(int j=0;j<=4;j++){
for(int k=0;k<=4;k++){
ans=min(ans,f[n][j][k]);
}
}
printf("%d\n",ans);
return 0;
}