#include <bits/stdc++.h>
using namespace std;
long long min_l(long long a, long long b) {
  if (a > b) {
    return b;
  } else {
    return a;
  }
}
vector<vector<long long> > dp_vac;
long long vacationTB(vector<long long>& a, long long n) {
  if (a[0] == 0) {
    dp_vac[0][0] = 1;
  } else if (a[0] == 1) {
    dp_vac[0][1] = 0;
  } else if (a[0] == 2) {
    dp_vac[0][2] = 0;
  } else {
    dp_vac[0][0] = 1;
    dp_vac[0][1] = 0;
    dp_vac[0][2] = 0;
  }
  for (long long i = 1; i < n; i++) {
    if (a[i] == 0) {
      dp_vac[i][0] = 1 + min_l(dp_vac[i - 1][0],
                               min_l(dp_vac[i - 1][1], dp_vac[i - 1][2]));
    } else if (a[i] == 1) {
      dp_vac[i][0] = 1 + min_l(dp_vac[i - 1][0],
                               min_l(dp_vac[i - 1][1], dp_vac[i - 1][2]));
      dp_vac[i][1] = min_l(dp_vac[i - 1][2], dp_vac[i - 1][0]);
    } else if (a[i] == 2) {
      dp_vac[i][0] = 1 + min_l(dp_vac[i - 1][0],
                               min_l(dp_vac[i - 1][1], dp_vac[i - 1][2]));
      dp_vac[i][2] = min_l(dp_vac[i - 1][1], dp_vac[i - 1][0]);
    } else {
      dp_vac[i][0] = 1 + min_l(dp_vac[i - 1][0],
                               min_l(dp_vac[i - 1][1], dp_vac[i - 1][2]));
      dp_vac[i][1] = min_l(dp_vac[i - 1][2], dp_vac[i - 1][0]);
      dp_vac[i][2] = min_l(dp_vac[i - 1][1], dp_vac[i - 1][0]);
    }
  }
  return min_l(min_l(dp_vac[n - 1][0], dp_vac[n - 1][1]),
               min_l(dp_vac[n - 1][2], dp_vac[n - 1][3]));
}
int main() {
  long long n, i, x;
  cin >> n;
  vector<long long> a;
  for (i = 0; i < n; i++) {
    cin >> x;
    a.push_back(x);
  }
  dp_vac.resize(105, vector<long long>(4, LONG_LONG_MAX));
  long long ans = vacationTB(a, n);
  cout << ans;
  return 0;
}
