#include <bits/stdc++.h>
using namespace std;
struct Edge {
  long long int from, to, cost;
};
long long int mod(long long int a, long long int mod) {
  long long int res = a % mod;
  if (res < 0) res = res + mod;
  return res;
}
long long int modpow(long long int a, long long int n, long long int mod) {
  long long int res = 1;
  while (n > 0) {
    if (n & 1) res = res * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return res;
}
long long int modinv(long long int a, long long int mod) {
  return modpow(a, mod - 2, mod);
}
bool is_prime(long long int n) {
  long long int i = 2;
  if (n == 1) return false;
  if (n == 2) return true;
  bool res = true;
  while (i * i < n) {
    if (n % i == 0) {
      res = false;
    }
    i = i + 1;
  }
  if (n % i == 0) res = false;
  return res;
}
long long int dp1[101][4];
long long int dp2[101][4];
long long int visited1[101][4];
long long int visited2[101][4];
string S;
long long int K;
long long int dpf1(long long int keta, long long int knum) {
  if (visited1[keta][knum] == 1) {
    return dp1[keta][knum];
  } else {
    visited1[keta][knum] = 1;
    if (keta == 1) {
      if (knum == 1) dp1[keta][knum] = 9;
      if (knum == 0) dp1[keta][knum] = 1;
    } else {
      if (knum == 0) dp1[keta][knum] = dpf1(keta - 1, knum);
      if (knum >= 1)
        dp1[keta][knum] = dpf1(keta - 1, knum) + 9 * dpf1(keta - 1, knum - 1);
    }
    return dp1[keta][knum];
  }
}
long long int dpf2(long long int keta, long long int knum) {
  if (visited2[keta][knum] == 1) {
    return dp2[keta][knum];
  } else {
    visited2[keta][knum] = 1;
    if (keta == 1) {
      if (knum == 0) dp2[keta][knum] = 1;
      if (knum == 1) dp2[keta][knum] = S[keta - 1] - '0';
    } else {
      if (knum == 0) dp2[keta][knum] = dpf2(keta - 1, knum);
      if (knum >= 1) {
        if (S[keta - 1] == '0')
          dp2[keta][knum] = dpf1(keta - 1, knum);
        else {
          dp2[keta][knum] = dpf1(keta - 1, knum);
          dp2[keta][knum] += (S[keta - 1] - '0' - 1) * dpf1(keta - 1, knum - 1);
          dp2[keta][knum] += dpf2(keta - 1, knum - 1);
        }
      }
    }
    return dp2[keta][knum];
  }
}
int main() {
  cin >> S;
  cin >> K;
  reverse(S.begin(), S.end());
  cout << dpf2(S.size(), K);
  return 0;
}
