func_code_string: #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;   }   