import math

def combinations_count(n, r):
    return math.factorial(n) // (math.factorial(n - r) * math.factorial(r))

N = input()
Nn = int(N)
K = int(input())

vlen = len(N)


#再帰関数
#Nnの頭からp桁目を見る
#
# print('K',K)
# print('N',N[0])
# print('vlen',vlen)



def saiki2(N, K, vlen, p):
    # print('**', p, K, '**')
    a = 0
    if (K == 0):
        #一つ上の桁で最後のKを使い果たした場合、
        ans =  1
    
    # 再帰が下にもぐるときは、桁の上位がNと同じで、下位の桁を見ないと大きいか分らない状態のときだけ

    elif(N[p] == '0'):
        ans=  saiki2(N, K, vlen, p+1)

    else:
        if(vlen == 1):
            ans = int(N[p])
        else:
            a = saiki2(N, K-1, vlen, p+1)
            # print('a',a)

            # print('K',vlen-p-1,K)
            b = (int(N[p])-1) * 9**(K-1) * combinations_count(vlen-p-1, K-1)
            if(vlen-p-1 <  K):
                c = 0
            else:
                c =  9**(K) * combinations_count(vlen-p-1, K)
            # print('b',b)
            # print('c',c)
            ans = a+b+c
            # print('toku', ans)

    # print('ret**', p, K, '**')
    return ans
ans = saiki2(N,K,vlen,0)


print(ans)
# 最大の項以外で成立する場合の数
# c =   combinations_count(vlen-1,K)

# anasi = c * 9 * (vlen-1)

# c2 =   combinations_count(vlen-1,K-1)

# aari = c2 * 9 * (int(N[0])-1)



# print(c)
# print(c * )




