#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <map>
using namespace std;
long long mod=1e9+7;
char ch[1005];
long long dp[1055];
int k;
long long f(long long x)
{
if(dp[x]!=-1)
return dp[x];
else
{
if(x==1)
return dp[x]=0;
else
{
long long cnt=0;
while(x>0)
{
int cur=x%2;
cnt+=cur;
x/=2;
}
return dp[x]=f(cnt)+1;
}
}
}
long long fac[1055];
long long afac[1055];
long long powd(long long a,long long b)
{
long long ans=1;
while(b>0)
{
if(b%2==1)
ans=ans*a%mod;
a=a*a%mod;
b/=2;
}
return ans;
}
long long C(long long b,long long a)
{
if(a<0)
return 0;
if(a>b)
return 0;
if(a==b)
return 1;
if(a==0)
return 1;
return 1ll*(fac[b]*afac[b-a]%mod)*afac[a]%mod;
}
int main() {
fac[0]=1;afac[0]=1;
for(long long i=1;i<=1050;i++)
fac[i]=fac[i-1]*i%mod,afac[i]=powd(fac[i],mod-2);
for(int i=0;i<=1050;i++)
dp[i]=-1;
for(int i=1;i<=1050;i++)
{
dp[i]=f(i);
}
while(~scanf("%s",ch))
{
scanf("%d",&k);
if(k==0)
{
printf("1\n");
} else
{
int len=strlen(ch);
long long ans=0;
for(int i=1;i<=1005;i++)
{
int cur=i;
if(dp[i]==k-1)
{
for(int j=0;j<len;j++)
{
if(ch[j]=='1')
{
long long ans1=len-j-1;
ans=(ans+C(ans1,cur))%mod;
cur--;
}
}
if(cur==0)
ans=(ans+1)%mod;
}
}
if(k==1)
ans=(ans-1)%mod;
ans=(ans+mod)%mod;
printf("%lld\n",ans%mod);
}
}
return 0;
}