#include <bits/stdc++.h>
using namespace std;
const int maxn = 9000020;
const int K = 60;
const int MOd = 1e9 + 7;
int a, b;
int nex[maxn][2];
int ar[3020], st[maxn];
int dn[maxn], N;
int ans;
int add(int a, int b) {
  a += b;
  a %= MOd;
  if (a < 0) return a + MOd;
  return a;
}
void dfs(int p, int n, int x) {
  st[n] = p;
  if (nex[p][0]) dfs(nex[p][0], n + 1, (x + x) & 15);
  if (nex[p][1]) dfs(nex[p][1], n + 1, (x + x + 1) & 15);
}
int main() {
  scanf("%d", &a);
  for (int i = 1; i <= a; i++) scanf("%d", &ar[i]);
  dn[0] = 1;
  for (int i = 1; i <= a; i++) {
    int n = 0;
    for (int j = i, p = 0, x = 0; j >= 1; j--) {
      st[n++] = p;
      x = (x + x + ar[j]) & 15;
      if (!nex[p][ar[j]]) {
        nex[p][ar[j]] = ++N;
        p = nex[p][ar[j]];
        if (n > 0) dn[p] = add(dn[p], dn[st[n - 1]]);
        if (n > 1) dn[p] = add(dn[p], dn[st[n - 2]]);
        if (n > 2) dn[p] = add(dn[p], dn[st[n - 3]]);
        if (n > 3 && x != 12 && x != 10 && x != 7 && x != 15)
          dn[p] = add(dn[p], dn[st[n - 4]]);
        ans = add(ans, dn[p]);
      } else
        p = nex[p][ar[j]];
    }
    cout << ans << endl;
  }
  return 0;
}
