#include #include #include #include #include //#define rep(i, j) for(int i = 0; i < j; ++i) #define FOR(v, i, j) for(int v = int(i); v < int(j); ++v) #define MOD 1000000007 //typedef long long ll using namespace std; //ios::sync_with_stdio(false); string want; int n, x; int DP[1010][1010][2]; void get_num() { int len = want.length(); FOR(i,0,len) { DP[i][0][0] = 0; DP[i][0][1] = 0; } FOR(i,0,len) { DP[0][i][0] = 1; DP[0][i][1] = 1; } //alg FOR(k,1,len+2) { FOR(l,k,len+2) { FOR(i, 0, 2) { if (!i) DP[k][l][0] = DP[k][l-1][0] + DP[k-1][l-1][0]; else if (want[len-l] == '1') DP[k][l][1] = DP[k][l-1][0] + DP[k-1][l-1][1]; else DP[k][l][1] = DP[k][l-1][1]; DP[k][l][i] %= MOD; } } } } char temp[1010]; int main(void){ cin >> n >> x; string want1; cin >> want1; want = want1; int len = want.length(); bool ok = true; FOR(i, 0, len) { if (want[i] == '1') { ok=false; break; } } //cout << want << endl; //DEBUG temp[0] = '0'; FOR(i, 1, len+1) { temp[i] = want[i-1]; } temp[len+1] = 0; //cout << string(temp) << endl; //DEBUG if (!ok) { FOR(i, 0, len) { if (temp[len-i] == '1') { temp[len-i] = '0'; break; } temp[len-i] = '1'; } } want = string(temp); //cout << want << endl; //DEBUG get_num(); int res1 = DP[x][len+1][1]; temp[0] = '1'; if (ok) { res1 = 0; FOR(i, 0, len+1) { if (temp[len-i] == '1') { temp[len-i] = '0'; break; } temp[len-i] = '1'; } } want = string(temp); //cout << want << endl; //DEBUG get_num(); int res2 = DP[x][len+1][1]; int res = res2 -res1; if (res < 0) res += MOD; cout << res << endl; return 0; }