注释大王。。。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=110;
char l[N],r[N];
int f[N][N],k,a[N];
int dfs(int pos,int st,int op){
//pos:位数
//st:上一位的数字(=11说明可以随便填(是最高位,前面没有限制))
//op:是否位于上界
if(!pos) return 1;
if(!op && f[pos][st] != -1) return f[pos][st];//搜过并且当前不是贴着上界,返回
int res=0,maxx=op?min(a[pos],9):9;//最大能填的数
for(int i=0;i <= maxx;i++){
if(abs(st-i)<2) continue;
if(st == 11 && i == 0) res += dfs(pos-1,11,op & (i == maxx));
else res += dfs(pos-1,i,op && (i == maxx));
}
return op?res:f[pos][st]=res;
}
int calc(int x){
memset(f,-1,sizeof(f));
int len=0;
while(x) a[++len]=x%10,x /= 10;
return dfs(len,11,1);
}
int main(){
int l,r;scanf("%d%d",&l,&r);
printf("%d",calc(r)-calc(l-1));
}
/*
sasakure.UK is the only god.
*/