func_code_string: #include <bits/stdc++.h>   using namespace std;   const int dx[] = {0, 1, 0, -1};   const int dy[] = {1, 0, -1, 0};   inline int read() {     int x = 0, f = 1;     char ch = getchar();     while (ch <  0  || ch >  9 ) {       if (ch ==  - ) f = -1;       ch = getchar();     }     while (ch >=  0  && ch <=  9 ) {       x = x * 10 + ch -  0 ;       ch = getchar();     }     return x * f;   }   inline long long read1() {     long long x = 0, f = 1;     char ch = getchar();     while (ch <  0  || ch >  9 ) {       if (ch ==  - ) f = -1;       ch = getchar();     }     while (ch >=  0  && ch <=  9 ) {       x = x * 10 + ch -  0 ;       ch = getchar();     }     return x * f;   }   const int N = 200010;   const int P = 1e9 + 7;   int dp[110][110][110];   int pw[110];   int Add(int a, int b) {     a += b;     return a >= P ? a - P : a;   }   char ch[110];   int main() {     int n, x;     n = read();     x = read();     scanf( %s , ch + 1);     for (int i = 1; i <= n; i++) dp[ch[i] -  0 ][i][i] = 1;     pw[0] = pw[1] = 2;     for (int i = 2; i <= x; i++) {       pw[i] = (long long)(pw[i - 1]) * pw[i - 2] % P;       for (int l = 1; l <= n; l++)         for (int r = l; r <= n; r++) {           dp[i][l][r] =               Add((long long)(dp[i - 1][l][r]) * (r == n ? pw[i - 2] : 1) % P,                   (long long)(dp[i - 2][l][r]) * (l == 1 ? pw[i - 1] : 1) % P);           for (int m = l; m <= r - 1; m++)             dp[i][l][r] = Add(dp[i][l][r], (long long)(dp[i - 1][l][m]) *                                                dp[i - 2][m + 1][r] % P);         }     }     cout << dp[x][1][n] << endl;     return 0;   }   