func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 103;   const int mod = 1e9 + 7;   char s[N];   long long g[N], f[N][N][N];   long long qpow(long long a, long long n) {     long long ret = 1;     while (n) {       if (n & 1) ret = ret * a % mod;       a = a * a % mod;       n >>= 1;     }     return ret;   }   int main() {     int n, m;     cin >> n >> m;     scanf( %s , s + 1);     g[0] = g[1] = 1;     for (int i = 2; i <= m; i++) (g[i] = g[i - 1] + g[i - 2]) %= (mod - 1);     for (int i = 0; i <= m; i++) g[i] = qpow(2, g[i]);     for (int i = 1; i <= n; i++) {       if (s[i] ==  1 )         f[1][i][i] = 1;       else         f[0][i][i] = 1;     }     for (int i = 2; i <= m; i++)       for (int l = 1; l <= n; l++)         for (int r = l; r <= n; r++) {           if (l == 1)             (f[i][l][r] += f[i - 2][l][r] * g[i - 1] % mod) %= mod;           else             (f[i][l][r] += f[i - 2][l][r]) %= mod;           if (r == n)             (f[i][l][r] += f[i - 1][l][r] * g[i - 2] % mod) %= mod;           else             (f[i][l][r] += f[i - 1][l][r]) %= mod;           for (int j = 1; j < r; j++) {             (f[i][l][r] += f[i - 1][l][j] * f[i - 2][j + 1][r] % mod) %= mod;           }         }     cout << f[m][1][n] << endl;     return 0;   }   