#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define inf 1<<30
#define mod 1000000007
#define N 100010
using namespace std;
struct matrix
{
LL m[3][3];
}ans;
matrix mult(matrix a,matrix b)
{
matrix c;
memset(c.m,0,sizeof(c.m));
for(int i=0;i<3;i++)
for(int k=0;k<3;k++)
{
if(a.m[i][k]==0)continue;
for(int j=0;j<3;j++)
{
if(b.m[k][j]==0)continue;
c.m[i][j]+=(a.m[i][k]%mod)*(b.m[k][j]%mod)%mod;
c.m[i][j]%=mod;
}
}
return c;
}
matrix quickmod(matrix x,LL n)
{
matrix temp;
memset(temp.m,0,sizeof(temp.m));
for(int i=0;i<3;i++)temp.m[i][i]=1;
while(n)
{
if(n&1)temp=mult(temp,x);
x=mult(x,x);
n>>=1;
}
return temp;
}
LL fact(LL x)
{
LL res=1;
for(int i=1;i<=x;i++)res*=10;
return res;
}
int main()
{
LL n,a;
while(scanf("%lld%lld",&a,&n)!=EOF)
{
LL temp=a,len=0;
while(temp)
{
len++;
temp/=10;
}
LL p=fact(len);
ans.m[0][0]=1;ans.m[0][1]=0;ans.m[0][2]=0;
ans.m[1][0]=p;ans.m[1][1]=p;ans.m[1][2]=0;
ans.m[2][0]=a;ans.m[2][1]=a;ans.m[2][2]=1;
ans=quickmod(ans,n-1);
LL res=ans.m[0][0]*a%mod+ans.m[1][0]*a%mod+ans.m[2][0];
printf("%lld
",res%mod);
}
}