样例都过不了。。。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1e9+7;
string l,r;
int s[1003];
int lenl,lenr,len;
int f[1003][10][10];
int dfs(int i,int j,int k,bool flag,bool op){
if(i==0)return (!op);
if(j!=-1&&k!=-1&&f[i][j][k]!=-1&&!flag&&!op)return f[i][j][k];
int up;
if(flag)up=s[i];
else up=9;
// cout<<up<<' ';
int ans=0;
for(int p=0;p<=up;p++){
if(p!=j&&p!=k&&!op){
ans=(ans+dfs(i-1,p,j,p==up&&flag,false))%mod;
}else if(op){
ans=(ans+dfs(i-1,i==0?-1:i,-1,p==up&&flag,i==0))%mod;
}
}
// cout<<i<<' '<<j<<' '<<k<<' '<<flag<<' '<<op<<' '<<ans<<endl;
f[i][j][k]=ans;
return ans;
}
signed main(){
cin>>l>>r;
lenl=l.size(),lenr=r.size();
for(int i=lenl-1;i>=0;i--){
if(l[i]!='0'){
l[i]--;
break;
}else{
l[i]='9';
}
}
if(l[0]=='0'&&lenl!=1){
for(int i=1;i<lenl;i++){
l[i-1]=l[i];
}
lenl--;
}
int ansr,ansl;
memset(f,-1,sizeof(f));
len=lenr;
for(int i=0;i<len;i++){
//cout<<r[i];
s[len-i]=r[i]-'0';
}
//for(int i=1;i<=len;i++)cout<<s[i];
//cout<<endl;
ansr=dfs(len,-1,-1,true,true);
memset(f,-1,sizeof(f));
len=lenl;
for(int i=0;i<len;i++){
s[len-i+1]=l[i]-'0';
}
ansl=dfs(len,-1,-1,true,true);
int lans=0,rans=0;
for(int i=0;i<lenl;i++){
lans=((lans*10)%mod+(l[i]-'0'))%mod;
}
for(int i=0;i<lenr;i++){
rans=((rans*10)%mod+(r[i]-'0'))%mod;
}
//cout<<"=-====-\n";
//cout<<ansl<<' '<<ansr<<endl;
cout<<(rans-lans-(ansr-ansl+mod)%mod+mod)%mod;
return 0;
}