水
#include <cstdio>
#include <algorithm>
using namespace std;
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline int read(void)
{
int a=0;static char c;
while((c=tc())<'0'||c>'9');
while(c>='0'&&c<='9')
a=a*10+c-'0',c=tc();
return a;
}
int n,a[30005],dp1[4][30005],ans,dp2[4][30005];
int main(void)
{
register int i,j,l;
n=read();
for (i=1;i<=n;++i)
a[i]=read();
for (i=1;i<=3;++i)
for (j=1;j<=n;++j)
dp1[i][j]=n+1,dp2[i][j]=n+1;
for (i=1;i<=3;++i)
if(i!=a[1])
dp1[i][1]=1;
else
dp1[i][1]=0;
for (j=2;j<=n;++j)
for (i=1;i<=3;++i)
for (l=1;l<=i;++l)
dp1[i][j]=min(dp1[i][j],dp1[l][j-1]+(a[j]!=i));
ans=min(min(dp1[1][n],dp1[2][n]),dp1[3][n]);
for (i=1;i<=3;++i)
if(i!=a[n])
dp2[i][n]=1;
else
dp2[i][n]=0;
for (j=n-1;j>=1;--j)
for (i=1;i<=3;++i)
for (l=1;l<=i;++l)
dp2[i][j]=min(dp2[i][j],dp2[l][j+1]+(a[j]!=i));
ans=min(min(dp2[1][1],dp2[2][1]),min(ans,dp2[3][1]));
printf("%d",ans);
return 0;
}