#include<bits/stdc++.h>
#define ll long long
#define pp push_back
#define endl '\n'
#define all(x) x.begin(),x.end()
#define ld long double
#define PI acos(-1)
#define ones(x) __builtin_popcountll(x)
//#define int ll
using namespace std;
void Drakon() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
#ifdef Clion
freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
#endif
}
unsigned long long inf = 1e10;
const double EPS = 1e-6;
const int MOD = 1000000007, N = 200005, LOG = 25;
ll mul(const ll &a, const ll &b) {
return (a % MOD + MOD) * (b % MOD + MOD) % MOD;
}
ll add(const ll &a, const ll &b) {
return (a + b + 2 * MOD) % MOD;
}
ll pw(ll x, ll y) {
ll ret = 1;
while (y > 0) {
if (y % 2 == 0) {
x = mul(x, x);
y = y / 2;
} else {
ret = mul(ret, x);
y = y - 1;
}
}
return ret;
}
string s;
ll dp[25][2][15];
ll slv(int i, bool less, int prevDigit) {
if(i == s.size()) return 1;
ll &ret = dp[i][less][prevDigit];
if(~ret)
return ret;
int mn = 0, mx = 9;
if(!less) mx = s[i] - '0';
ret = 0;
for (int j = mn; j <= mx; ++j) {
if(prevDigit == 10) {
ret += slv(i + 1, less | (j < (s[i] - '0')), (j == 0 ? 10 : j));
}
else {
if(abs(j - prevDigit) <= 2)
ret += slv(i + 1, less | (j < (s[i] - '0')), j);
}
}
return ret;
}
void solve() {
ll l, r;
cin >> l >> r;
memset(dp, -1, sizeof dp);
s = to_string(r);
ll ans = slv(0, false, 10);
memset(dp, -1, sizeof dp);
s = to_string(l - 1);
ans -= slv(0, false, 10);
cout << ans;
}
signed main() {
Drakon();
int t = 1;
//cin >> t;
while (t--) {
solve();
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcHAgcHVzaF9iYWNrCiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSx4LmVuZCgpCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBQSSBhY29zKC0xKQojZGVmaW5lIG9uZXMoeCkgX19idWlsdGluX3BvcGNvdW50bGwoeCkKLy8jZGVmaW5lIGludCBsbAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgRHJha29uKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgY291dC50aWUobnVsbHB0cik7CiNpZmRlZiBDbGlvbgogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbiksIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7CiNlbmRpZgp9Cgp1bnNpZ25lZCBsb25nIGxvbmcgaW5mID0gMWUxMDsKY29uc3QgZG91YmxlIEVQUyA9IDFlLTY7CmNvbnN0IGludCBNT0QgPSAxMDAwMDAwMDA3LCBOID0gMjAwMDA1LCBMT0cgPSAyNTsKCmxsIG11bChjb25zdCBsbCAmYSwgY29uc3QgbGwgJmIpIHsKICAgIHJldHVybiAoYSAlIE1PRCArIE1PRCkgKiAoYiAlIE1PRCArIE1PRCkgJSBNT0Q7Cn0KCmxsIGFkZChjb25zdCBsbCAmYSwgY29uc3QgbGwgJmIpIHsKICAgIHJldHVybiAoYSArIGIgKyAyICogTU9EKSAlIE1PRDsKfQoKbGwgcHcobGwgeCwgbGwgeSkgewogICAgbGwgcmV0ID0gMTsKICAgIHdoaWxlICh5ID4gMCkgewogICAgICAgIGlmICh5ICUgMiA9PSAwKSB7CiAgICAgICAgICAgIHggPSBtdWwoeCwgeCk7CiAgICAgICAgICAgIHkgPSB5IC8gMjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXQgPSBtdWwocmV0LCB4KTsKICAgICAgICAgICAgeSA9IHkgLSAxOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXQ7Cn0KCnN0cmluZyBzOwpsbCBkcFsyNV1bMl1bMTVdOwoKbGwgc2x2KGludCBpLCBib29sIGxlc3MsIGludCBwcmV2RGlnaXQpIHsKICAgIGlmKGkgPT0gcy5zaXplKCkpIHJldHVybiAxOwogICAgbGwgJnJldCA9IGRwW2ldW2xlc3NdW3ByZXZEaWdpdF07CiAgICBpZih+cmV0KQogICAgICAgIHJldHVybiByZXQ7CiAgICBpbnQgbW4gPSAwLCBteCA9IDk7CiAgICBpZighbGVzcykgbXggPSBzW2ldIC0gJzAnOwogICAgcmV0ID0gMDsKICAgIGZvciAoaW50IGogPSBtbjsgaiA8PSBteDsgKytqKSB7CiAgICAgICAgaWYocHJldkRpZ2l0ID09IDEwKSB7CiAgICAgICAgICAgIHJldCArPSBzbHYoaSArIDEsIGxlc3MgfCAoaiA8IChzW2ldIC0gJzAnKSksIChqID09IDAgPyAxMCA6IGopKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmKGFicyhqIC0gcHJldkRpZ2l0KSA8PSAyKQogICAgICAgICAgICAgICAgcmV0ICs9IHNsdihpICsgMSwgbGVzcyB8IChqIDwgKHNbaV0gLSAnMCcpKSwgaik7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJldDsKfQoKdm9pZCBzb2x2ZSgpIHsKICAgIGxsIGwsIHI7CiAgICBjaW4gPj4gbCA+PiByOwoKICAgIG1lbXNldChkcCwgLTEsIHNpemVvZiBkcCk7CiAgICBzID0gdG9fc3RyaW5nKHIpOwogICAgbGwgYW5zID0gc2x2KDAsIGZhbHNlLCAxMCk7CgogICAgbWVtc2V0KGRwLCAtMSwgc2l6ZW9mIGRwKTsKICAgIHMgPSB0b19zdHJpbmcobCAtIDEpOwogICAgYW5zIC09IHNsdigwLCBmYWxzZSwgMTApOwoKICAgIGNvdXQgPDwgYW5zOwp9CgpzaWduZWQgbWFpbigpIHsKICAgIERyYWtvbigpOwogICAgaW50IHQgPSAxOwogICAgLy9jaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQp9