/*dp[pos][cnt][flag] -> dp form with states*/
int solve(int b)
{
num.clear();
while (b > 0)
num.pb(b % 10), b /= 10;
reverse(all(num));
return call(0, 0, 0);
}
int call(int pos, int cnt, int flag)
{
if (cnt > k) return 0;
if (pos == num.size())
{
if (cnt == k) return 1;
else return 0;
}
if (f[pos][cnt][flag] != -1) return f[pos][cnt][flag];
f[pos][cnt][flag] = 0;
int limit = 9;
if (flag == 0)
limit = num[pos];
for (int i = 0; i <= limit; i++)
{
int next_flag = flag, next_cnt = cnt;
if (i < limit) next_flag = 1;
if (i == d) next_cnt++;
f[pos][cnt][flag] += call(pos + 1, next_cnt, next_flag);
}
return f[pos][cnt][flag];
}