#include <bits/stdc++.h>   using namespace std;   int dp[1005];   long long ncr[1005][1005];   int ones(int n);   void calc_ncr();   int main() {     string n;     int k;     cin >> n;     cin >> k;     calc_ncr();     dp[1] = 0;     for (int i(2); i < (1001); i++) {       dp[i] = dp[ones(i)] + 1;     }     long long res = 0, num_ones = 0;     int len = n.length();     if (k == 0) {       cout <<  1 n ;       return 0;     }     for (int i(0); i < (len); i++) {       if (n[i] ==  0 ) {         continue;       }       int j = max(num_ones, 1LL);       while (j < 1000) {         if (dp[j] == k - 1) {           res = (res + ncr[len - i - 1][j - num_ones]) % 1000000007;           if (i == 0 && k == 1) {             res = (res + 1000000007 - 1) % 1000000007;           }         }         j++;       }       num_ones++;     }     int count = 0;     for (int i(0); i < (len); i++) {       if (n[i] ==  1 ) {         count++;       }     }     if (dp[count] == k - 1) {       res = (res + 1) % 1000000007;     }     cout << res <<   n ;     return 0;   }   int ones(int n) {     int count = 0;     while (n) {       if (n % 2 == 1) {         count++;       }       n /= 2;     }     return count;   }   void calc_ncr() {     for (int i(0); i < (1001); i++) {       ncr[i][0] = 1;     }     for (int i(1); i < (1001); i++) {       for (int j(1); j < (i + 1); j++) {         ncr[i][j] = (ncr[i - 1][j - 1] + ncr[i - 1][j]) % 1000000007;       }     }   }   