#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; long long solve(long long n) { if(n < 2) return 0; long long mod = 1000000000000; vector dp(4, 0); dp[0] = 1; long long ans = 1; while(mod > 0){ if(n / mod > 2) ans += mod / 10; else if(n / mod == 2) ans += (n % mod + 8) / 10; int curr = n / mod % 10; vector nextDp(4, 0); for(int i=0; i<4; ++i){ if(dp[i] == 0) continue; for(int a=0; a<=9; ++a){ if(!(i & 1) && curr < a) continue; if((i & 2) && a == 2){ if((i & 1) || a < curr) ans += dp[i] * mod; else ans += (dp[i] - 1) * mod + n % mod + 1; } int k = i & 1; if(a < curr) k |= 1; if(a == 1) k |= 2; nextDp[k] += dp[i]; } } dp.swap(nextDp); mod /= 10; } return ans; } int main() { long long a, b; cin >> a >> b; long long ans = solve(b) - solve(a-1); if((a - 1) % 10 == 1){ long long x = a; while(x >= 10) x /= 10; if(x == 2) -- ans; } cout << ans << endl; return 0; }