#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=5e9+7,M=3000;
int len,num[M],dp[M][11][11],numl,numr;
string L,R;
ll solve(int pos,int pre1,int pre2,int st,int limit){
if(pos>len)return 1;
if(!limit&&dp[pos][pre1][pre2]!=-1&&pre1!=-1&&pre2!=-1&&!st)
return dp[pos][pre1][pre2];
int up=limit?num[pos]:9; ll cnt=0;
for(int i=1;i<=up;++i)
if(i!=pre1&&i!=pre2&&!st)cnt=(cnt+solve(pos+1,i,pre1,0,limit&&i==up))%mod;
else if(st)cnt=(cnt+solve(pos+1,(!i&&st)?-1:i,-1,!i&&st,limit&&i==up))%mod;
if(!limit&&!st&&pre1!=-1&&pre2!=-1)dp[pos][pre1][pre2]=cnt;
return cnt;}
ll part(){
int flag=0;
len=L.size();
for(int i=0;i<len;++i){
num[i+1]=L[i]-'0';
if((L[i]==L[i+1]&&i+1<len)||(L[i]==L[i+2]&&i+2<len)) flag=1;}
ll ans1=solve(1,-1,-1,1,1)+(flag?0:-1);
len=R.size();
for(int i=0;i<len;++i)num[i+1]=R[i]-'0';
ll ans2=solve(1,-1,-1,1,1);
return (ans2-ans1)%mod;}
int main(){
memset(dp,-1,sizeof(dp));
cin>>L>>R;
int l1=L.size(),l2=R.size();
for(int i=0;i<l1;++i)numl=(numl*10%mod+(L[i]-'0'))%mod;
for(int i=0;i<l2;++i)numr=(numr*10%mod+(R[i]-'0'))%mod;
printf("%lld",((numr-numl-part()+1)%mod+mod)%mod);
return 0;}
希望快点回复