#include <bits/stdc++.h>
template <typename T>
using MaxHeap = std::priority_queue<T>;
template <typename T>
using MinHeap = std::priority_queue<T, std::vector<T>, std::greater<T>>;
template <typename T>
inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
std::vector<T> vec(int len, T elem) {
  return std::vector<T>(len, elem);
}
template <typename T>
void vdeb(std::vector<T> &da) {
  for (int i = 0; i < da.size(); i++) {
    if (i == da.size() - 1)
      std::cout << da[i];
    else
      std::cout << da[i] << ' ';
  }
  std::cout << std::endl;
}
template <typename T>
void vdeb(std::vector<std::vector<T>> &da) {
  for (int i = 0; i < da.size(); i++) vdeb(da[i]);
  std::cout << std::endl;
}
using namespace std;
int main() {
  string s;
  int k;
  cin >> s >> k;
  int n = s.size() - 1;
  int N = n;
  long long ans = 0;
  while (n > -1 && k > 0) {
    if (s[N - n] == '0') {
      n--;
      continue;
    }
    long long add = s[N - n] - '0' - 1;
    for (int i = (0); i < (int)(k - 1); i++) {
      add *= (n - i) * 9;
      add /= i + 1;
    }
    ans += add;
    add = 1;
    for (int i = (0); i < (int)(k); i++) {
      add *= (n - i) * 9;
      add /= i + 1;
    }
    ans += add;
    k--;
    n--;
  }
  if (k == 0) ans++;
  cout << ans << endl;
}
