#include <bits/stdc++.h>
using namespace std;
long long dp[1000][2][5];
class Combination {
  vector<long long> fact;
  vector<long long> factinv;
  long long MOD = 1e9 + 7;
  long long modpow(long long a, long long n) {
    if (n == 0) return 1;
    if (n % 2 == 0) {
      long long t = modpow(a, n / 2);
      return t * t % MOD;
    }
    return a * modpow(a, n - 1) % MOD;
  }
  long long modinv(long long a) { return modpow(a, MOD - 2); }

 public:
  Combination(int n) : fact(n), factinv(n) {
    fact[0] = 1;
    for (int i = 1; i < n; i++) {
      fact[i] = fact[i - 1] * i % MOD;
    }
    factinv[n - 1] = modinv(fact[n - 1]);
    for (int i = n - 2; i >= 0; i--) {
      factinv[i] = factinv[i + 1] * (i + 1) % MOD;
    }
  }
  long long ncr(long long n, long long r) {
    if (r < 0 || r > n) return 0;
    return fact[n] * factinv[r] % MOD * factinv[n - r] % MOD;
  }
  long long npr(long long n, long long r) {
    if (r < 0 || r > n) return 0;
    return fact[n] * factinv[n - r] % MOD;
  }
  long long nhr(long long n, long long r) {
    if (n == 0 && r == 0) return 1;
    return ncr(n + r - 1, r);
  }
};
int main() {
  Combination comb(200);
  string n;
  cin >> n;
  int K;
  cin >> K;
  dp[0][0][0] = 0;
  dp[0][1][0] = 1;
  for (int i = 0; i < n.length(); i++) {
    for (int k = 0; k < (int)(K); k++) {
      int tmp = n[i] - '1';
      dp[i + 1][0][k] += dp[i][0][k];
      dp[i + 1][0][k + 1] += dp[i][0][k] * 9;
      dp[i + 1][1][k + 1] += dp[i][1][k];
      if (tmp > 0) {
        dp[i + 1][0][k + 1] += dp[i][1][k] * tmp;
      }
      if (n[i] != '0') {
        dp[i + 1][0][k] += dp[i][1][k];
      }
    }
  }
  long long fact = 1;
  for (int i = 0; i < (int)(K); i++) {
    fact *= 9;
  }
  long long ans = 0;
  for (int i = 0; i < (int)(n.length() + 1); i++) {
    ans += dp[i][0][K];
    ans += dp[i][1][K];
  }
  cout << ans << endl;
  return 0;
}
