#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3010;
const int mod = 1e9 + 7;
int n, x[MAXN], dp[MAXN], ans, trie[MAXN * MAXN][2];
inline bool chk(int i) {
  if (!x[i - 3] && !x[i - 2] && x[i - 1] && x[i]) return 0;
  if (!x[i - 3] && x[i - 2] && !x[i - 1] && x[i]) return 0;
  if (x[i - 3] && x[i - 2] && x[i - 1] && !x[i]) return 0;
  if (x[i - 3] && x[i - 2] && x[i - 1] && x[i]) return 0;
  return 1;
}
inline void add(int &x, int y) {
  x += y;
  if (x >= mod) x -= mod;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d", &x[i]);
  int rt = 1, cnt = 1;
  for (int i = 1; i <= n; ++i) {
    dp[i + 1] = 1;
    int r = rt;
    for (int j = i; j; --j) {
      dp[j] = 0;
      add(dp[j], dp[j + 1]);
      add(dp[j], dp[j + 2]);
      add(dp[j], dp[j + 3]);
      if (chk(j + 3)) add(dp[j], dp[j + 4]);
      if (!trie[r][x[j]]) trie[r][x[j]] = ++cnt, add(ans, dp[j]);
      r = trie[r][x[j]];
    }
    printf("%d\n", ans);
  }
}
