#include using namespace std; #undef _P #define _P(...) (void)printf(__VA_ARGS__) #define FORR(x,arr) for(auto&& x:arr) #define FOR(i,a,b) for (int i = (a); i < (b); i++) #define RFOR(i,a,b) for (int i = (b)-1; i >= (a); i--) #define REP(i,n) for (int i = 0; i < (n); i++) #define RREP(i,n) for (int i = (n)-1; i >= 0; i--) #define ALL(x) (x).begin(), (x).end() #define BIT(n) (1LL<<(n)) #define SZ(x) ((int)(x).size()) typedef long long ll; // ------------------------------------- ll dp1[15][2][2][10]; // pos, less, last1, num12 ll count1(string& S) { int N = SZ(S); memset(dp1, 0, sizeof(dp1)); dp1[0][0][0][0] = 1; REP(i, N) REP(j, 2) REP(k, 2) REP(l, 10) { int lim = j ? 9 : S[i] - '0'; REP(d, lim + 1) { if (k && d == 2) { dp1[i+1][j || d < lim][0][l+1] += dp1[i][j][k][l]; } else { dp1[i+1][j || d < lim][d==1][l] += dp1[i][j][k][l]; } } } ll ans = 0; REP(j, 2) REP(k, 2) REP(l, 10) { ans += dp1[N][j][k][l] * l; } return ans; } ll dp2[15][2][2][2][2]; // pos, less, lead0, first2, last2 ll count2(string& S) { int N = SZ(S); memset(dp2, 0, sizeof(dp2)); dp2[0][0][1][0][0] = 1; REP(i, N) REP(j, 2) REP(k, 2) REP(l, 2) REP(m, 2) { int lim = j ? 9 : S[i] - '0'; REP(d, lim + 1) { dp2[i+1][j || d < lim][k && d == 0][l || (k && d == 2)][i==N-1 && d == 2] += dp2[i][j][k][l][m]; } } ll ans = 0; REP(j, 2) { ans += dp2[N][j][0][1][1]; } return ans; } string dec(string S) { int bollow = 1; for (int i = S.length() - 1; i >= 0; i--) { int p = S[i] - '0'; if (p - bollow < 0) { S[i] = '9'; bollow = 1; } else { S[i] = (p - bollow) + '0'; break; } } return S; } void Main() { string A, B; cin >> A >> B; string da(dec(A)); ll a1 = count1(da); ll b1 = count1(B); ll a2 = count2(da); ll b2 = count2(B); //_P("%lld + %lld = %lld\n", a1, a2, a1+a2); //_P("%lld + %lld = %lld\n", b1, b2, b1+b2); ll ans = b1 + b2 - a1 - a2; if (A[0] == '2' && A.back() == '2') ans--; cout << ans << endl; } int main() { cin.tie(0); ios::sync_with_stdio(false); Main(); return 0; }