# 解説放送



def main():

    S = eval(input())

    N = len(S)

    K = int(eval(input()))



    dp = [[[0] * 2 for _ in range(K + 1)] for _ in range(N + 1)]

    dp[0][0][0] = 1

    # dp[i][j][k]

    # i桁目まで決めてj個の非0を使って

    # k=0: そこまでの桁はSと一致

    # k=1: すでにS未満が確定



    for i, c in enumerate(S):  # 100

        for j in range(K + 1):  # 4

            for k in range(2):  # 2

                nd = int(c)

                for d in range(10):  # 10

                    ni, nj, nk = i + 1, j, k

                    if d != 0: nj += 1  # 次の桁の値dとして0以外を採用すると非0の個数njが増える

                    if nj > K: continue  # 非0の数字を使用してよい上限を超えており、加算対象ではない

                    if k == 0:  # そこまでSと一致しているとき

                        if d > nd: continue  # 次の桁の値dがS[i]を超えており、採用するとSを超えるため、加算対象ではない

                        if d < nd: nk = 1  # 次の桁の値dがs[i]を下回っており、採用すると未満が確定する

                    dp[ni][nj][nk] += dp[i][j][k]



    print((sum(dp[N][K])))





if __name__ == '__main__':

    main()

def main():

    EQ = 0

    LESS = 1



    *S, = list(map(int, eval(input())))

    L = len(S)

    K = int(eval(input()))



    dp = [[[0] * 2 for _ in range(K + 2)] for _ in range(L + 1)]

    dp[0][0][EQ] = 1



    for i, x in enumerate(S):

        for k in range(K + 1):  # ここをrange(K)にしてバグらせた

            if x == 0:

                dp[i + 1][k][EQ] += dp[i][k][EQ]  # x

            else:

                dp[i + 1][k + 1][EQ] += dp[i][k][EQ]  # x

                dp[i + 1][k + 1][LESS] += dp[i][k][EQ] * (x - 1)  # <x

                dp[i + 1][k][LESS] += dp[i][k][EQ]  # ==0

            dp[i + 1][k + 1][LESS] += dp[i][k][LESS] * 9  # !=0

            dp[i + 1][k][LESS] += dp[i][k][LESS]  # ==0



    print((sum(dp[L][K])))  # 全部0はK個の0でない数字を含まないので除去する必要がない





if __name__ == '__main__':

    main()

# 解説放送
def main():
    S = eval(input())
    N = len(S)
    K = int(eval(input()))
    dp = [[[0] * 2 for _ in range(K + 1)] for _ in range(N + 1)]
    dp[0][0][0] = 1
    # dp[i][j][k]
    # i桁目まで決めてj個の非0を使って
    # k=0: そこまでの桁はSと一致
    # k=1: すでにS未満が確定
    for i, c in enumerate(S):  # 100
        for j in range(K + 1):  # 4
            for k in range(2):  # 2
                nd = int(c)
                for d in range(10):  # 10
                    ni, nj, nk = i + 1, j, k
                    if d != 0:
                        nj += 1  # 次の桁の値dとして0以外を採用すると非0の個数njが増える
                    if nj > K:
                        continue  # 非0の数字を使用してよい上限を超えており、加算対象ではない
                    if k == 0:  # そこまでSと一致しているとき
                        if d > nd:
                            continue  # 次の桁の値dがS[i]を超えており、採用するとSを超えるため、加算対象ではない
                        if d < nd:
                            nk = 1  # 次の桁の値dがs[i]を下回っており、採用すると未満が確定する
                    dp[ni][nj][nk] += dp[i][j][k]
    print((sum(dp[N][K])))


if __name__ == "__main__":
    main()

def main():
    EQ = 0
    LESS = 1
    (*S,) = list(map(int, eval(input())))
    L = len(S)
    K = int(eval(input()))
    dp = [[[0] * 2 for _ in range(K + 2)] for _ in range(L + 1)]
    dp[0][0][EQ] = 1
    for i, x in enumerate(S):
        for k in range(K + 1):  # ここをrange(K)にしてバグらせた
            if x == 0:
                dp[i + 1][k][EQ] += dp[i][k][EQ]  # x
            else:
                dp[i + 1][k + 1][EQ] += dp[i][k][EQ]  # x
                dp[i + 1][k + 1][LESS] += dp[i][k][EQ] * (x - 1)  # <x
                dp[i + 1][k][LESS] += dp[i][k][EQ]  # ==0
            dp[i + 1][k + 1][LESS] += dp[i][k][LESS] * 9  # !=0
            dp[i + 1][k][LESS] += dp[i][k][LESS]  # ==0
    print((sum(dp[L][K])))  # 全部0はK個の0でない数字を含まないので除去する必要がない


if __name__ == "__main__":
    main()

-# 解説放送 -    S = eval(input()) -    N = len(S) +    EQ = 0 +    LESS = 1 +    (*S,) = list(map(int, eval(input()))) +    L = len(S) -    dp = [[[0] * 2 for _ in range(K + 1)] for _ in range(N + 1)] -    dp[0][0][0] = 1 -    # dp[i][j][k] -    # i桁目まで決めてj個の非0を使って -    # k=0: そこまでの桁はSと一致 -    # k=1: すでにS未満が確定 -    for i, c in enumerate(S):  # 100 -        for j in range(K + 1):  # 4 -            for k in range(2):  # 2 -                nd = int(c) -                for d in range(10):  # 10 -                    ni, nj, nk = i + 1, j, k -                    if d != 0: -                        nj += 1  # 次の桁の値dとして0以外を採用すると非0の個数njが増える -                    if nj > K: -                        continue  # 非0の数字を使用してよい上限を超えており、加算対象ではない -                    if k == 0:  # そこまでSと一致しているとき -                        if d > nd: -                            continue  # 次の桁の値dがS[i]を超えており、採用するとSを超えるため、加算対象ではない -                        if d < nd: -                            nk = 1  # 次の桁の値dがs[i]を下回っており、採用すると未満が確定する -                    dp[ni][nj][nk] += dp[i][j][k] -    print((sum(dp[N][K]))) +    dp = [[[0] * 2 for _ in range(K + 2)] for _ in range(L + 1)] +    dp[0][0][EQ] = 1 +    for i, x in enumerate(S): +        for k in range(K + 1):  # ここをrange(K)にしてバグらせた +            if x == 0: +                dp[i + 1][k][EQ] += dp[i][k][EQ]  # x +            else: +                dp[i + 1][k + 1][EQ] += dp[i][k][EQ]  # x +                dp[i + 1][k + 1][LESS] += dp[i][k][EQ] * (x - 1)  # <x +                dp[i + 1][k][LESS] += dp[i][k][EQ]  # ==0 +            dp[i + 1][k + 1][LESS] += dp[i][k][LESS] * 9  # !=0 +            dp[i + 1][k][LESS] += dp[i][k][LESS]  # ==0 +    print((sum(dp[L][K])))  # 全部0はK個の0でない数字を含まないので除去する必要がない