#include #include using namespace std; #define EPS (1e-10) #define REP(i,n) for (int i =0; i < (n);i++) typedef long double ld; typedef long long ll; typedef pair ii; typedef pair pdd; typedef vector vi; typedef vector vll; typedef vector vd; typedef vector vb; typedef vector > vvi; typedef vector vii; const int MOD = 1000000007; ll solve(vector>> &dp, vi &s, int n, int k, int c) { // cout << n << " "<< k << " " << c << endl; // cout << dp[n][k][c] << endl; if (k < 0) return 0; if (n < 0) return 0; if (dp[n][k][c] != -1) return dp[n][k][c]; ll res = 0; if (s[n] == 1) { if (c == 0) { res = solve(dp, s, n-1, k-1, 0); } else { res = solve(dp, s, n-1, k, 1); res += solve(dp, s, n-1, k, 0); res %= MOD; res += solve(dp, s, n-1, k-1, 1); res %= MOD; } } else { if (c == 1) { res = solve(dp, s, n-1, k, 1); } else { res = solve(dp, s, n-1, k, 0); res += solve(dp, s, n-1, k-1, 1); res %= MOD; res += solve(dp, s, n-1, k-1, 0); res %= MOD; } } return dp[n][k][c] = res; } int main(int argc, char** argv) { ios::sync_with_stdio(false); int N, K; cin >> N >> K; vi s(N+1); char chi; REP(i, N) { cin >> chi; if (chi == '0') s[N-i] = 0; else s[N-i] = 1; } vector>> dp(N+1, vector>(K+1, vector(2, -1))); // for(int i = 0; i <= N; ++i) { // for(int j = 0; j <= K; ++j) { // dp[i][j][0] = dp[i][j][1] = -1; // } // } // init for(int j = 0; j <= K; ++j) { dp[0][j][0] = dp[0][j][1] = 0; } dp[0][0][0] = 1; cout << ((solve(dp, s, N, K, 0) + solve(dp, s, N, K-1, 1)) %MOD) << endl; return 0; }