1 //数位dp入门
2 #include<cstdio>
3 int a[8],d[8][3];
4
5 void init()
6 {
7 d[0][0] = 1;
8 for(int i=1; i<7; ++i)
9 {
10 d[i][0] = d[i-1][0]*9 - d[i-1][1]; //当前位全部吉利数个数
11 d[i][1] = d[i-1][0]; //当前位为2的全部吉利数的个数
12 d[i][2] = d[i-1][2]*10 + d[i-1][0] + d[i-1][1]; //当前位全部不吉利数个数
13 }
14 }
15
16 int solven(int x) //求小于x的吉利数个数
17 {
18 int t = x,pos = 0;
19 while(x != 0)
20 {
21 a[++pos] = x%10;
22 x /= 10;
23 }
24 a[pos+1] = 0; //防止数据之间的影响
25 int flag = 0,ans = 0;
26 for(int i=pos; i>0; --i) //求0-x之间不吉利数个数
27 {
28 ans += d[i-1][2]*a[i];
29 if(flag != 0)
30 ans += d[i-1][0]*a[i];
31 else
32 {
33 if(a[i] > 4) //高位可能为4
34 ans += d[i-1][0];
35 if(a[i] > 6 || (a[i] == 6 && a[i-1] > 2)) //高位出现62
36 ans += d[i-1][1];
37 if(a[i] == 4 || (a[i+1] == 6 && a[i] == 2)) //前面已经出现了62或者4
38 flag = 1;
39 }
40 }
41 return t-ans;
42 }
43
44 int main()
45 {
46 init();
47 int n,m;
48 while(~scanf("%d%d",&n,&m) && n+m != 0)
49 printf("%d\n",solven(m+1) - solven(n));
50 return 0;
51 }