#include #define rep(E, F) for (E = 0; E < (F); E++) int get_int(); typedef long long ll; int main() { ll i, n = get_int(), a = 0, b = 0, c = 0, r = 0, t = 0, m = 1000000007; ll x[n]; rep(i, n) x[i] = get_int(); rep(i, n) c += x[i] == 3 ? 1 : 0; rep(i, n) switch (x[i]) { case 1: a++; break; case 2: b = (t + a)%m; t = (t + b)%m; r = (r + (b*c)%m)%m; break; case 3: c--; break; } printf("%lld\n", r); return 0; } int get_int() { int ret = 0; char c = getchar(); int sgn; while (1) { if (c == EOF) return EOF; if (c >= '0' && c <= '9') { sgn = 1; break; } if (c == '-') { c = getchar(); if (c < '0' || c > '9') continue; sgn = -1; break; } c = getchar(); } while (1) { ret = ret*10 + c - '0'; c = getchar(); if (c < '0' || c > '9') return sgn*ret; } }