1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=1e3+5;
4 const int mod=1e9+7;
5 int n,m,mark;
6 char l[maxn],r[maxn];
7 int numl,numr;
8 int tot,e[maxn];
9 long long c[maxn][20][2];
10 template<class t>void red(t &x)
11 {
12 int w=1;
13 x=0;
14 char ch=getchar();
15 while(ch>'9'||ch<'0')
16 {
17 if(ch=='-')
18 w=-1;
19 ch=getchar();
20 }
21 while(ch>='0'&&ch<='9')
22 {
23 x=(x<<3)+(x<<1)+ch-'0';
24 ch=getchar();
25 }
26 x*=w;
27 }
28 void input()
29 {
30 freopen("input.txt","r",stdin);
31 }
32 void dv(int x)
33 {
34 tot=0;
35 while(x)
36 {
37 e[++tot]=x%10;
38 x/=10;
39 }
40 e[tot+1]=0;
41 }
42 long long dfs(int pos,bool limit,bool zero,int pre,int qpre,bool dc)
43 {
44 if(pos==0)
45 return dc;
46 if(!limit&&c[pos][pre][dc]!=-1)
47 return c[pos][pre][dc];
48 int up=limit?e[pos]:9;
49 long long ans=0;
50 for(int i=0;i<=up;++i)
51 ans+=dfs(pos-1,limit&&(i==up),zero||i,i,zero?pre:-1,dc||(i==pre&&zero)||(i==qpre&&zero))%mod;
52 if(!limit&&zero&&qpre!=-1)
53 c[pos][pre][dc]=ans;
54 return ans;
55 }
56 long long solve()
57 {
58 //dv(x);
59 tot=0;
60 while(m--)
61 e[++tot]=r[m]-'0';
62 while(!e[tot])
63 --tot;
64 memset(c,-1,sizeof(c));
65 long long ans=dfs(tot,1,0,-1,-1,0)%mod;
66 tot=0;
67 while(n--)
68 e[++tot]=l[n]-'0';
69 while(!e[tot])
70 --tot;
71 memset(c,-1,sizeof(c));
72 ans-=dfs(tot,1,0,-1,-1,0)%mod;
73 return ans;
74 }
75 void read()
76 {
77 scanf("%s%s",l,r);
78 n=strlen(l);
79 m=strlen(r);
80 }
81 void work()
82 {
83 int i=1;
84 while(l[n-i]=='0'&&n>i)
85 {
86 l[n-i]='9';
87 ++i;
88 }
89 l[n-i]-=1;
90 printf("%lld",(solve()+mod)%mod);
91 }
92 int main()
93 {
94 input();
95 read();
96 work();
97 return 0;
98 }