def main():

    NOT_DET = 0

    SMALLER = 1



    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でない数字の個数][smaller=1]

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



    for i, ci in enumerate(s):

        for j in range(k + 1):

            dp[i + 1][j][SMALLER] = (

                    dp[i][j][SMALLER]

                    + dp[i][j][NOT_DET] * (1 if ci != '0' else 0)

                    + (dp[i][j - 1][SMALLER] if j > 0 else 0) * 9

                    + (dp[i][j - 1][NOT_DET] if j > 0 else 0) * max(0, int(ci) - 1)

            )



            dp[i + 1][j][NOT_DET] = dp[i][j][NOT_DET] if ci == '0' else (

                dp[i][j - 1][NOT_DET] if j > 0 else 0)



    print((sum(dp[n][k])))





if __name__ == '__main__':

    main()



# import sys

#

# sys.setrecursionlimit(10 ** 7)

#

# input = sys.stdin.readline

# rstrip()

# int(input())

# map(int, input().split())

# 解説放送



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():
    NOT_DET = 0
    SMALLER = 1
    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でない数字の個数][smaller=1]
    dp[0][0][0] = 1
    for i, ci in enumerate(s):
        for j in range(k + 1):
            dp[i + 1][j][SMALLER] = (
                dp[i][j][SMALLER]
                + dp[i][j][NOT_DET] * (1 if ci != "0" else 0)
                + (dp[i][j - 1][SMALLER] if j > 0 else 0) * 9
                + (dp[i][j - 1][NOT_DET] if j > 0 else 0) * max(0, int(ci) - 1)
            )
            dp[i + 1][j][NOT_DET] = (
                dp[i][j][NOT_DET]
                if ci == "0"
                else (dp[i][j - 1][NOT_DET] if j > 0 else 0)
            )
    print((sum(dp[n][k])))


if __name__ == "__main__":
    main()
# import sys
#
# sys.setrecursionlimit(10 ** 7)
#
# input = sys.stdin.readline
# rstrip()
# int(input())
# map(int, input().split())

# 解説放送
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()

+# 解説放送 -    NOT_DET = 0 -    SMALLER = 1 -    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でない数字の個数][smaller=1] +    S = eval(input()) +    N = len(S) +    K = int(eval(input())) +    dp = [[[0] * 2 for _ in range(K + 1)] for _ in range(N + 1)] -    for i, ci in enumerate(s): -        for j in range(k + 1): -            dp[i + 1][j][SMALLER] = ( -                dp[i][j][SMALLER] -                + dp[i][j][NOT_DET] * (1 if ci != "0" else 0) -                + (dp[i][j - 1][SMALLER] if j > 0 else 0) * 9 -                + (dp[i][j - 1][NOT_DET] if j > 0 else 0) * max(0, int(ci) - 1) -            ) -            dp[i + 1][j][NOT_DET] = ( -                dp[i][j][NOT_DET] -                if ci == "0" -                else (dp[i][j - 1][NOT_DET] if j > 0 else 0) -            ) -    print((sum(dp[n][k]))) +    # 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]))) -# import sys -# -# sys.setrecursionlimit(10 ** 7) -# -# input = sys.stdin.readline -# rstrip() -# int(input()) -# map(int, input().split())