import math
def isMore(N,K):#- N以上の数で、０でないのが丁度K個
    #-len(N)よりもKがおおきかったら0 埋められない
    if len(N) < K:
        return 0
    #最高位の数字を1つ繰り上げれば、なんでも大きい。ただし、Kは1以上
    if K>=1:
        tmp = (9-int(N[0]))*fact[len(N)-1]//((fact[len(N)-K])*(fact[K-1]))*(9**(K-1))
        #一桁ならtmpを返す
        if len(N)==1:
            return tmp
        #２桁以上あるなら＆最高位が０なら、最高桁繰り上げ＋最高桁同じ＋０でないものがK個
        elif len(N)>1 and N[0]=='0':
            return tmp + isMore(N[1:],K)
        #２桁以上あるなら＆最高位が０以外なら、最高桁繰り上げ＋最高桁同じ＋０でないものがK-1個
        elif len(N)>1 and N[0]!='0':
            return tmp + isMore(N[1:],K-1)
    #Kが0ならどうやってもNより大きいものが作れない0
    if K == 0:
        return 0

N = input()
K = int(input())
lenN = len(N)
fact = [1]*101
for i in range(1,101):
    fact[i] = fact[i-1]*i

ans = fact[lenN]//((fact[lenN-K])*fact[K])*(9**K)
ans -= isMore(N,K)
print(ans) import math math def isMore(N,K):#- N以上の数で、０でないのが丁度K個
    #-len(N)よりもKがおおきかったら0 埋められない
    if len(N) < K:
        return 0
    #最高位の数字を1つ繰り上げれば、なんでも大きい。ただし、Kは1以上
    if K>=1:
        tmp = (9-int(N[0]))*fact[len(N)-1]//((fact[len(N)-K])*(fact[K-1]))*(9**(K-1))
        #一桁ならtmpを返す
        if len(N)==1:
            return tmp
        #２桁以上あるなら＆最高位が０なら、最高桁繰り上げ＋最高桁同じ＋０でないものがK個
        elif len(N)>1 and N[0]=='0':
            return tmp + isMore(N[1:],K)
        #２桁以上あるなら＆最高位が０以外なら、最高桁繰り上げ＋最高桁同じ＋０でないものがK-1個
        elif len(N)>1 and N[0]!='0':
            return tmp + isMore(N[1:],K-1)
    #Kが0ならどうやってもNより大きいものが作れない0
    if K == 0:
        return 0 isMore if len(N) < K:
        return 0
    #最高位の数字を1つ繰り上げれば、なんでも大きい。ただし、Kは1以上
     len(N) < K len(N) len N K return 0 0 if K>=1:
        tmp = (9-int(N[0]))*fact[len(N)-1]//((fact[len(N)-K])*(fact[K-1]))*(9**(K-1))
        #一桁ならtmpを返す
        if len(N)==1:
            return tmp
        #２桁以上あるなら＆最高位が０なら、最高桁繰り上げ＋最高桁同じ＋０でないものがK個
        elif len(N)>1 and N[0]=='0':
            return tmp + isMore(N[1:],K)
        #２桁以上あるなら＆最高位が０以外なら、最高桁繰り上げ＋最高桁同じ＋０でないものがK-1個
        elif len(N)>1 and N[0]!='0':
            return tmp + isMore(N[1:],K-1)
    #Kが0ならどうやってもNより大きいものが作れない0
     K>=1 K 1 tmp = (9-int(N[0]))*fact[len(N)-1]//((fact[len(N)-K])*(fact[K-1]))*(9**(K-1)) tmp (9-int(N[0]))*fact[len(N)-1]//((fact[len(N)-K])*(fact[K-1]))*(9**(K-1)) (9-int(N[0]))*fact[len(N)-1]//((fact[len(N)-K])*(fact[K-1])) (9-int(N[0]))*fact[len(N)-1] 9-int(N[0]) 9 int(N[0]) int N[0] N 0 fact[len(N)-1] fact len(N)-1 len(N) len N 1 (fact[len(N)-K])*(fact[K-1]) fact[len(N)-K] fact len(N)-K len(N) len N K fact[K-1] fact K-1 K 1 9**(K-1) 9 K-1 K 1 if len(N)==1:
            return tmp
        #２桁以上あるなら＆最高位が０なら、最高桁繰り上げ＋最高桁同じ＋０でないものがK個
        elif len(N)>1 and N[0]=='0':
            return tmp + isMore(N[1:],K)
        #２桁以上あるなら＆最高位が０以外なら、最高桁繰り上げ＋最高桁同じ＋０でないものがK-1個
        elif len(N)>1 and N[0]!='0':
            return tmp + isMore(N[1:],K-1)
    #Kが0ならどうやってもNより大きいものが作れない0
     len(N)==1 len(N) len N 1 return tmp tmp elif len(N)>1 and N[0]=='0':
            return tmp + isMore(N[1:],K)
        #２桁以上あるなら＆最高位が０以外なら、最高桁繰り上げ＋最高桁同じ＋０でないものがK-1個
         len(N)>1 and N[0]=='0' len(N)>1 len(N) len N 1 N[0]=='0' N[0] N 0 '0' return tmp + isMore(N[1:],K) tmp + isMore(N[1:],K) tmp isMore(N[1:],K) isMore N[1:] N 1: 1 K elif len(N)>1 and N[0]!='0':
            return tmp + isMore(N[1:],K-1)
    #Kが0ならどうやってもNより大きいものが作れない0
     len(N)>1 and N[0]!='0' len(N)>1 len(N) len N 1 N[0]!='0' N[0] N 0 '0' return tmp + isMore(N[1:],K-1) tmp + isMore(N[1:],K-1) tmp isMore(N[1:],K-1) isMore N[1:] N 1: 1 K-1 K 1 if K == 0:
        return 0 K == 0 K 0 return 0 0 N N K K N = input() N input() input K = int(input()) K int(input()) int input() input lenN = len(N) lenN len(N) len N fact = [1]*101 fact [1]*101 [1] 1 101 for i in range(1,101):
    fact[i] = fact[i-1]*i i range(1,101) range 1 101 fact[i] = fact[i-1]*i fact[i] fact i fact[i-1]*i fact[i-1] fact i-1 i 1 i ans = fact[lenN]//((fact[lenN-K])*fact[K])*(9**K) ans fact[lenN]//((fact[lenN-K])*fact[K])*(9**K) fact[lenN]//((fact[lenN-K])*fact[K]) fact[lenN] fact lenN (fact[lenN-K])*fact[K] fact[lenN-K] fact lenN-K lenN K fact[K] fact K 9**K 9 K ans -= isMore(N,K) ans isMore(N,K) isMore N K print(ans) print ans def isMore(N,K):#- N以上の数で、０でないのが丁度K個
    #-len(N)よりもKがおおきかったら0 埋められない
    if len(N) < K:
        return 0
    #最高位の数字を1つ繰り上げれば、なんでも大きい。ただし、Kは1以上
    if K>=1:
        tmp = (9-int(N[0]))*fact[len(N)-1]//((fact[len(N)-K])*(fact[K-1]))*(9**(K-1))
        #一桁ならtmpを返す
        if len(N)==1:
            return tmp
        #２桁以上あるなら＆最高位が０なら、最高桁繰り上げ＋最高桁同じ＋０でないものがK個
        elif len(N)>1 and N[0]=='0':
            return tmp + isMore(N[1:],K)
        #２桁以上あるなら＆最高位が０以外なら、最高桁繰り上げ＋最高桁同じ＋０でないものがK-1個
        elif len(N)>1 and N[0]!='0':
            return tmp + isMore(N[1:],K-1)
    #Kが0ならどうやってもNより大きいものが作れない0
    if K == 0:
        return 0 def isMore(N,K):#- N以上の数で、０でないのが丁度K個
    #-len(N)よりもKがおおきかったら0 埋められない
    if len(N) < K:
        return 0
    #最高位の数字を1つ繰り上げれば、なんでも大きい。ただし、Kは1以上
    if K>=1:
        tmp = (9-int(N[0]))*fact[len(N)-1]//((fact[len(N)-K])*(fact[K-1]))*(9**(K-1))
        #一桁ならtmpを返す
        if len(N)==1:
            return tmp
        #２桁以上あるなら＆最高位が０なら、最高桁繰り上げ＋最高桁同じ＋０でないものがK個
        elif len(N)>1 and N[0]=='0':
            return tmp + isMore(N[1:],K)
        #２桁以上あるなら＆最高位が０以外なら、最高桁繰り上げ＋最高桁同じ＋０でないものがK-1個
        elif len(N)>1 and N[0]!='0':
            return tmp + isMore(N[1:],K-1)
    #Kが0ならどうやってもNより大きいものが作れない0
    if K == 0:
        return 0 isMore ans -= isMore(N,K) isMore(N,K) ans lenN = len(N) len(N) lenN fact = [1]*101 [1]*101 fact N = input() input() N K = int(input()) int(input()) K ans = fact[lenN]//((fact[lenN-K])*fact[K])*(9**K) fact[lenN]//((fact[lenN-K])*fact[K])*(9**K) ans
import math
def isMore(N,K):#- N以上の数で、０でないのが丁度K個
    #-len(N)よりもKがおおきかったら0 埋められない
    if len(N) < K:
        return 0
    #最高位の数字を1つ繰り上げれば、なんでも大きい。ただし、Kは1以上
    if K>=1:
        tmp = (9-int(N[0]))*fact[len(N)-1]//((fact[len(N)-K])*(fact[K-1]))*(9**(K-1))
        #一桁ならtmpを返す
        if len(N)==1:
            return tmp
        #２桁以上あるなら＆最高位が０なら、最高桁繰り上げ＋最高桁同じ＋０でないものがK個
        elif len(N)>1 and N[0]=='0':
            return tmp + isMore(N[1:],K)
        #２桁以上あるなら＆最高位が０以外なら、最高桁繰り上げ＋最高桁同じ＋０でないものがK-1個
        elif len(N)>1 and N[0]!='0':
            return tmp + isMore(N[1:],K-1)
    #Kが0ならどうやってもNより大きいものが作れない0
    if K == 0:
        return 0

N = input()
K = int(input())
lenN = len(N)
fact = [1]*101
for i in range(1,101):
    fact[i] = fact[i-1]*i

ans = fact[lenN]//((fact[lenN-K])*fact[K])*(9**K)
ans -= isMore(N,K)
print(ans)
