1 #include <iostream>
2 #include <cstdlib>
3 #include <cstdio>
4 #include <cstring>
5 #include <algorithm>
6 #include <cmath>
7 #include <queue>
8 #include <map>
9 #include <set>
10 #include <vector>
11 #define N 10005
12 using namespace std;
13 long long n;
14 int k,zz,cnt;
15 long long c[50],p=1000000007;
16 long long jg[1000005];
17 void dfs(long long x,int st,int len)
18 {
19 if(len==14)
20 {
21 return;
22 }
23 zz++;
24 jg[zz]=x;
25 for(int i=st;i<=9;i++)
26 {
27 dfs(x*i*1ll,i,len+1);
28 }
29 }
30 long long f[15][10][N];
31 long long ans[N];
32 long long work(int x)
33 {
34 long long sum=0;
35 for(int i=1;i<cnt;i++)
36 {
37 for(int j=1;j<=9;j++)
38 {
39 sum+=f[i][j][x];
40 }
41 }
42 long long la=1;
43 for(int i=cnt;i>0;i--)
44 {
45 if(la==0||jg[x]%la||la>jg[x])break;
46 int t=lower_bound(jg+1,jg+1+zz,jg[x]/la)-jg;
47 for(int j=1;j<c[i];j++)
48 {
49 sum+=f[i][j][t];
50 }
51 la*=c[i];
52 }
53 return sum;
54 }
55 map<int,bool> vi[N];
56 struct no{
57 int a,b;
58 long long data;
59 bool friend operator < (no a,no b)
60 {
61 return a.data<b.data;
62 }
63 };
64 int main()
65 {
66 scanf("%lld%d",&n,&k);
67 zz++;jg[zz]=0;
68 long long tt=n;
69 while(tt)
70 {
71 cnt++;
72 c[cnt]=tt%10;
73 tt/=10;
74 }
75 c[1]++;
76 dfs(1,2,1);
77
78 sort(jg+1,jg+zz+1);
79 zz=unique(jg+1,jg+zz+1)-jg-1;
80 for(int i=1;i<=9;i++)
81 {
82 f[1][i][lower_bound(jg+1,jg+zz+1,i)-jg]=1;
83 }
84 for(int i=1;i<cnt;i++)
85 {
86 for(int j=1;j<=9;j++)
87 {
88 for(int k=1;k<=9;k++)
89 {
90 for(int l=1;l<=zz;l++)
91 {
92 if(!f[i][j][l])continue;
93 if(jg[l]*(long long)k>jg[zz])continue;
94 f[i+1][k][lower_bound(jg+1,jg+1+zz,jg[l]*k)-jg]+=f[i][j][l];
95 }
96 }
97 }
98 }
99 for(int i=1;i<=zz;i++)
100 {
101 ans[i]=work(i);
102 }
103 sort(ans+1,ans+zz+1);
104
105 no aa;
106 aa.a=aa.b=zz;
107 aa.data=ans[zz]*ans[zz];
108 priority_queue<no> q1;
109
110 q1.push(aa);
111 long long sum=0;
112 while(k&&!q1.empty())
113 {
114 k--;
115 while(!q1.empty()&&vi[q1.top().a][q1.top().b]) q1.pop();
116 aa=q1.top();q1.pop();
117 sum+=aa.data%p;
118 sum%=p;
119 vi[aa.a][aa.b]=1;
120 aa.a--;
121 aa.data=ans[aa.a]*ans[aa.b];
122 q1.push(aa);
123 aa.a++;aa.b--;
124 aa.data=ans[aa.a]*ans[aa.b];
125 q1.push(aa);
126 }
127 printf("%lld\n",sum);
128 return 0;
129 }