func_code_string: #include <bits/stdc++.h>   using namespace std;   const long double pi = 3.14159265359;   template <typename T>   T abs(T x) {     return x > 0 ? x : -x;   }   template <typename T>   T sqr(T x) {     return x * x;   }   const long long mod = 1000000007;   struct matr {     int maxn;     int n;     long long a[1 << 7][1 << 7];     matr(int _n) {       maxn = 1 << _n;       n = _n;       for (int i = 0; i < maxn; i++)         for (int j = 0; j < maxn; j++) a[i][j] = 0;     }     matr operator*(const matr &other) const {       matr res(n);       long long mod2 = mod * mod;       for (int i = 0; i < maxn; i++)         for (int j = 0; j < maxn; j++) {           for (int h = 0; h < maxn; h++) {             res.a[i][j] += (a[i][h] * other.a[h][j]);             if (res.a[i][j] >= mod2) res.a[i][j] -= mod2;           }           res.a[i][j] %= mod;         }       return res;     }     vector<long long> operator*(const vector<long long> &row) {       vector<long long> res(maxn);       for (int i = 0; i < maxn; i++) {         for (int j = 0; j < maxn; j++) {           res[i] += (a[i][j] * row[j]) % mod;         }         res[i] %= mod;       }       return res;     }   };   matr gen(int n) {     if (n == 1) {       matr res(n);       res.a[0][1] = 1;       res.a[0][0] = 1;       res.a[1][0] = 1;       return res;     }     matr res(7);     for (int _left = 0; _left < (1 << n); _left++) {       for (int mid = 0; mid < (1 << (n - 1)); mid++) {         int cmid = (mid << 1) | 1 | (1 << n);         for (int _right = 0; _right < (1 << n); _right++) {           bool bad = false;           for (int j = 0; j < n && !bad; j++) {             bad |= bool(_left & (1 << j)) && bool(_right & (1 << j)) &&                    bool(cmid & (1 << j)) && bool(cmid & (1 << (j + 1)));           }           if (!bad) {             res.a[_right][_left]++;           }         }       }     }     return res;   }   int main() {     vector<long long> ans(1 << 7);     ans[1] = 1;     for (int i = 1; i <= 7; i++) {       int n;       cin >> n;       matr x(7), res(7);       x = gen(i);       for (int j = 0; j < (1 << i); j++)         for (int h = 0; h < (1 << i); h++) res.a[j][h] = j == h;       while (n) {         if (n & 1) res = res * x;         x = x * x;         n >>= 1;       }       ans = res * ans;       if (i == 7) break;       for (int j = 0; j < (1 << i); j++) {         ans[j | (1 << i)] = ans[j];         ans[j] = 0;       }     }     cout << ans[(1 << 7) - 1] << endl;     return 0;   }   