Problem:
Score : 500 points

Problem Statement

Find the number of integers between 1 and N (inclusive) that contains exactly K non-zero digits when written in base ten.

Constraints

1 \leq N < 10^{100}

1 \leq K \leq 3

Input

Input is given from Standard Input in the following format:

N
K

Output

Print the count.

Sample Input 1

100
1

Sample Output 1

19

The following 19 integers satisfy the condition:

1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100

Sample Input 2

25
2

Sample Output 2

14

The following 14 integers satisfy the condition:

11,12,13,14,15,16,17,18,19,21,22,23,24,25

Sample Input 3

314159
2

Sample Output 3

937

Sample Input 4

9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
3

Sample Output 4

117879300

Solution in C++14 (Clang 3.8.0) (judge verdict: Time Limit Exceeded)

#include <iostream>
#include<algorithm>
#include<math.h>
#include<vector>
#include<string>
#include <queue>
#include <stack>
#include <cmath>
#include <set>
#include <cstring>
#include <map>
#include <unordered_map>
using namespace std;
typedef long long ll;
string n;
int k;
int ans = 0;
bool go2(string x, string y) {
	if (x.size() < y.size()) {
		return true;
	}
	else if(x.size() > y.size()){
		return false;
	}
	else {
		for (int i = 0; i < x.size(); i++) {
			if (x[i] < y[i]) {
				return true;
			}
			else if (x[i] > y[i])return false;
		}
		return true;
	}
}
void go(string s, int x) {
	if (x == k) {
		for (int i = 0;; i++) {
			if (go2(s, n)) {
				ans += 1;
			}
			else break;
			s += '0';
		}
		return;
	}
	if (s.size() > n.size()) {
		return;
	}
	if (s != "") {
		go(s + "0", x);
		for (int i = 1; i <= 9; i++) {
			go(s + to_string(i), x + 1);
		}
	}
	else {
		for (int i = 1; i <= 9; i++) {
			go(s + (char)('0' + i), x + 1);
		}
	}
}
int main() {
	cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false);
	cin >> n >> k;
	go("", 0);
	cout << ans << '\n';



}