#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("-O3")
using namespace std;
template <typename T1, typename T2>
ostream& operator<<(ostream& os, pair<T1, T2> p) {
  cout << "(" << p.first << ", " << p.second << ")";
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, vector<T>& vec) {
  os << "{";
  for (int i = 0; i < vec.size(); i++)
    os << vec[i] << (i + 1 == vec.size() ? "" : ", ");
  os << "}";
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, set<T>& st) {
  cout << "{";
  for (auto itr = st.begin(); itr != st.end(); itr++)
    cout << *itr << (next(itr) != st.end() ? ", " : "");
  cout << "}";
  return os;
}
template <typename T1, typename T2>
ostream& operator<<(ostream& os, map<T1, T2> mp) {
  cout << "{";
  for (auto itr = mp.begin(); itr != mp.end(); itr++)
    cout << "(" << (itr->first) << ", " << (itr->second) << ")"
         << (next(itr) != mp.end() ? "," : "");
  cout << "}";
  return os;
}
void dump_func() { cout << endl; }
template <class Head, class... Tail>
void dump_func(Head&& head, Tail&&... tail) {
  cout << head;
  if (sizeof...(Tail) == 0) {
    cout << " ";
  } else {
    cout << ", ";
  }
  dump_func(std::move(tail)...);
}
template <class T>
inline bool chmax(T& a, T const& b) {
  if (a >= b) return false;
  a = b;
  return true;
}
template <class T>
inline bool chmin(T& a, T const& b) {
  if (a <= b) return false;
  a = b;
  return true;
}
using ll = long long;
using P = pair<int, int>;
using Pl = pair<ll, ll>;
using vi = vector<int>;
using vvi = vector<vi>;
using vl = vector<ll>;
using vvl = vector<vl>;
using vp = vector<Pl>;
using vvp = vector<vp>;
const int INF = 1 << 29;
const long long LINF = 1LL << 59;
void solve(string N, long long K) {
  ll sz = N.size();
  ll ans = 0;
  vector<vvl> dp(sz + 1, vvl(K + 1, vl(2)));
  dp[0][0][0] = 1;
  for (long long i = 0; i < sz; i++) {
    for (long long k = 0; k < K + 1; k++) {
      dp[i + 1][k][1] += dp[i][k][1];
      if (k + 1 <= K) dp[i + 1][k + 1][1] += dp[i][k][1] * 9;
      if (N[i] != '0')
        dp[i + 1][k][1] += dp[i][k][0];
      else
        dp[i + 1][k][0] += dp[i][k][0];
      if (k + 1 <= K && N[i] != '0')
        dp[i + 1][k + 1][1] += dp[i][k][0] * (ll(N[i] - '0') - 1);
      if (k + 1 <= K) dp[i + 1][k + 1][0] += dp[i][k][0];
    }
  }
  cout << dp[sz][K][1] + dp[sz][K][0] << endl;
}
int main() {
  std::cout << std::fixed << std::setprecision(15);
  string N;
  cin >> N;
  long long K;
  cin >> K;
  solve(N, K);
  return 0;
}
