AC代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=50005,M=N*16+16,mod=1e9+7;
int vis[M];
pair<int,int>dp[M];
char L[N],R[N],now[N];
void read(char *s)
{
scanf("%s",now);
int len=strlen(now);
for(int i=0;i<=N-5;i++)
{
s[i]='0';
}
for(int i=0;i<len;i++)
{
s[N-5-len+i+1]=now[i];
}
return;
}
bool invaild(bool on_L,bool on_R,int num,int x)
{
if(on_L&&num<L[x]-'0') return 1;
if(on_R&&num>R[x]-'0') return 1;
return 0;
}
pair<int,int>dfs(int dep,bool on_L1,bool on_L2,bool on_R1,bool on_R2)
{
if(dep>N-5)
{
return make_pair(1,0);
}
int tmp=dep*16+on_L1*8+on_L2*4+on_R1*2+on_R2;
if(vis[tmp]) return dp[tmp];
vis[tmp]=1;
int cnt=0,sum=0;
for(int i=0;i<=9;i++)
{
if(invaild(on_L1,on_R1,i,dep)) continue;
for(int j=0;j<=9;j++)
{
if(invaild(on_L2,on_R2,j,dep)) continue;
pair<int,int>to=dfs(dep+1,on_L1&&i==L[dep]-'0',on_L2&&j==L[dep]-'0',on_R1&&i==R[dep]-'0',on_R2&&j==R[dep]-'0');
sum=(sum+abs(i-j)*to.first+to.second)%mod;
cnt=(cnt+to.first)%mod;
}
}
dp[tmp]=make_pair(cnt,sum);
return dp[tmp];
}
signed main()
{
read(L);
read(R);
pair<int,int>ans=dfs(0,1,1,1,1);
cout<<ans.second;
return 0;
}