特殊二进制数 - 代码源竞赛平台

题目描述

蜗蜗在研究一种整数操作。对于一个正整数 xx,一次操作会将它替换为其二进制表示中数字 11 的个数。

蜗蜗会不断执行这一操作,直到整数第一次变成 11,并立即停止。如果一个整数恰好需要执行 kk 次操作,就称它为特殊数。整数 11 本身需要执行 00 次操作。

给定一个用二进制表示的正整数 NN,请你求出 11 到 NN 中有多少个特殊数,答案对 109+710^9+7 取模。

输入格式

第一行包含一个不含前导零的二进制字符串,表示正整数 NN。

第二行包含一个整数 kk,表示要求的操作次数。

输出格式

输出一行一个整数,表示不超过 NN 的特殊正整数数量对 109+710^9+7 取模的结果。

样例

101
1
2

样例解释

二进制数 101101 对应的十进制数为 55。

在 11 到 55 中,22 和 44 的二进制表示分别为 1010 和 100100,它们都恰好经过一次操作变成 11。整数 11 本身需要 00 次操作,因此不计入答案。

数据范围

对于 100% 的数据,保证 1≤N<210001\le N<2^{1000},0≤k≤10000\le k\le 1000。

NN 的二进制表示长度为 11 到 10001000,且不含前导零。