#include <bits/stdc++.h>
using namespace std;
 
#define int long long
#define FOR(i, a, b) for (int i=(a); i<(b); ++i)
#define ROF(i, b, a) for (int i=(b); i>(a); --i)
#define CASET int _T; cin >> _T; REP(caset, 0, _T)
#define vi vector<int>
#define vb vector<bool>
#define vs vector<string>
#define vvi vector<vi>
#define vvb vector<vb>
#define pii pair<int,int>
#define t3i tuple<int,int,int>
#define mii map<int,int>
#define vpii vector<pii>
#define vt3i vector<t3i>
#define sq(x) (x)*(x)
#define inv(x) powa(x, MOD-2)

long long INF = 1LL<<60;
long long MOD = 1e9+7;

template <typename A, typename B> istream &operator>>(istream &is, pair<A, B> &pr) {is >> pr.first >> pr.second; return is;}
template <typename A> istream &operator>>(istream &is, vector<A> &v) {for (auto &x : v) is >> x; return is;}
ostream &operator<<(ostream &os, char &c) {os << (char)c; return os;}
ostream &operator<<(ostream &os, const char s[]) {os << (string)s; return os;}
ostream &operator<<(ostream &os, string &s) {for (char &c : s) os << (char)c; return os;}
template <typename A, typename B> ostream &operator<<(ostream &os, pair<A, B> &pr) {os << '(' << pr.first << ", " << pr.second << ')'; return os;}
ostream &operator<<(ostream &os, vb &v) {
    bool first = true;
    os << '[';
    for (const bool &x : v) {
        if (!first) os << ", ";
        first = false;
        os << x;
    }
    os << ']';
    return os;
}
template <class C> ostream &operator<<(ostream &os, C &v) {
    bool first = true;
    os << '[';
    for (auto &x : v) {
        if (!first) os << ", ";
        first = false;
        os << x;
    }
    os << ']';
    return os;
}
string bin_string(int x) {
    const int d = 32;
    string res(d, ' ');
    FOR(i, 0, d) res[d-1-i] = '0'+(x>>i & 1LL);
    return res;
}
int powa(int base, int exp) {
    int res = 1;
    while (exp) {
        if (exp&1) res = res*base % MOD;
        base = base*base % MOD;
        exp >>= 1;
    }
    return res;
}

vi fact;
int nCk(int n, int k) {
    if (k < 0 || k > n) return 0;
    return fact[n]*inv(fact[k]) % MOD * inv(fact[n-k]) % MOD;
}

int f(int n, int k) {
    if (k < 0 || k > n) return 0;
    return nCk(n, k) * powa(9, n-k) % MOD;
}

main() {
    ios::sync_with_stdio(0), cin.tie(0);

    string s;
    int k;
    cin >> s >> k;
    int n = s.size();
    k = n-k;

    int BIG = 300;
    fact.resize(BIG);
    fact[0] = 1;
    FOR(i, 1, BIG) fact[i] = i*fact[i-1] % MOD;

    int res = 0;
    int j = 0;
    FOR(i, 0, n) {
        if (s[i] == '0') ++j;
        else {
            int cur = f(n-1-i, k+j-1) + max(0, s[i]-'0'-1) * f(n-1-i, k+j) % MOD;
            res += cur;
        }
    }
    int cnt = 0;
    FOR(i, 0, n) if (s[i] == '0') ++cnt;
    if (cnt == k) ++res;
    cout << res;
}