#include <bits/stdc++.h>
using namespace std;
inline int Pow(int x, int y, int mod) {
  long long t = x, r = 1;
  for (; y; y >>= 1, t = t * t % mod) y& 1 ? r = r * t % mod : 0;
  return r;
}
inline int Get() {
  int res = 0, q = 1;
  char ch = getchar();
  while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
  if (ch == '-') q = -1, ch = getchar();
  while (ch >= '0' && ch <= '9') res = res * 10 + ch - '0', ch = getchar();
  return res * q;
}
const double eps = 1e-12, pi = M_PI;
const int oo = (int)2.1e9, mod = (int)1e9 + 7;
const long long INF = (long long)1e17;
const int N = 110;
int n;
int dp[N][3];
int a[N];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d", a + i);
  dp[1][0] = 1;
  dp[1][1] = a[1] == 1 || a[1] == 3 ? 0 : oo;
  dp[1][2] = a[1] == 2 || a[1] == 3 ? 0 : oo;
  for (int i = 2; i <= n; ++i) {
    dp[i][0] = min(min(dp[i - 1][0], dp[i - 1][1]), dp[i - 1][2]) + 1;
    if (a[i] == 1 || a[i] == 3)
      dp[i][1] = min(dp[i - 1][0], dp[i - 1][2]);
    else
      dp[i][1] = oo;
    if (a[i] == 2 || a[i] == 3)
      dp[i][2] = min(dp[i - 1][0], dp[i - 1][1]);
    else
      dp[i][2] = oo;
  }
  printf("%d\n", min(dp[n][0], min(dp[n][1], dp[n][2])));
  return 0;
}
