#include <iostream>
#include <stdio.h>
#include <cstring>

using namespace std;
char a[20], b[20];

long long DP[20][10][10][10][10];
int N;

int num[2][10] = {{1, 0, 2, 0, 3, 0, 4, 0, 5, 0},
                  {0, 1, 0, 2, 0, 3, 0, 4, 0, 5}};

long long dp (int pos, int even_b, int odd_b, int even_db, int odd_db) {
    if (pos == N) {
        return even_db == 0 and odd_db == 0;
    }

    long long &res = DP[pos][even_b][odd_b][even_db][odd_db];

    if (res != -1) return res;

    res = 0;

    int even = even_b + even_db;
    int odd = odd_b + odd_db;

    bool factor = even == 0 and odd == 0;
    if (factor)
        res += dp (pos + 1, even_b, odd_b, even_db, odd_db);

    for (int i = 1; i <= even_b; i++)
         res += dp (pos + 1, even_b - 1, odd_b, even_db + 1, odd_db);

    for (int i = 1; i <= even_db; i++)
         res += dp (pos + 1, even_b  + 1, odd_b, even_db - 1, odd_db);

    for (int i = 1; i <= odd_b; i++)
         res += dp (pos + 1, even_b, odd_b - 1, even_db, odd_db + 1);

    for (int i = 1; i <= odd_db; i++)
         res += dp (pos + 1, even_b , odd_b + 1, even_db, odd_db - 1);

    for (int i = even + 1; i <= 5 - factor; i++)
        res += dp (pos + 1, even_b + 1, odd_b, even_db, odd_db);

    for (int i = odd + 1; i <= 5; i++)
        res += dp (pos + 1, even_b, odd_b, even_db, odd_db + 1);

    return res;
}

int n[10];

void update (int &even_b, int &odd_b, int &even_db, int &odd_db) {
    even_b = 0, odd_b = 0, even_db = 0, odd_db = 0;

    bool b = 0;
    for (int i = 1; i < 10; i++) if (n[i] != 0) b = 1;
    if (!b) return;

    for (int i = 0; i < 10; i++)
        if (n[i] != 0) {
            if (i&1) {
                if (n[i]&1)
                    odd_db++;
                else
                    odd_b++;
            } else {
                if (n[i]&1)
                    even_b++;
                else
                    even_db++;
            }
        }
}
long long calc (char c[]) {
    memset (DP, -1, sizeof (DP));
    memset (n, 0, sizeof n);

    N = strlen (c);

    long long res = 0;
    int even_b = 0, odd_b = 0, even_db = 0, odd_db = 0;

    for (int i = 0; i < strlen (c); i++) {
        int x = c[i] - '0';
        for (int j = 0; j < x; j++) {
            n[j]++;
            update (even_b, odd_b, even_db, odd_db);

            res += dp (i + 1, even_b, odd_b, even_db, odd_db);
            n[j]--;
        }

        n[x]++;
    }

    update (even_b, odd_b, even_db, odd_db);

   // if (even_db == 0 and odd_db == 0) res++;

    return res;
}

bool is_balanced (char c[]) {
    memset (n, 0, sizeof n);

    for (int i = 0; i < strlen (c); i++) {
        n[c[i] - '0']++;
    }

    for (int i = 0; i < 10; i++)
        if ((i % 2) == (n[i] % 2) and n[i] != 0)
            return 0;

    return 1;
}

int main () {
  //  freopen ("balanced.in", "r", stdin);

    scanf ("%s %s\n", &a, &b);

  //  N = 3;

    //cout << dp (0, 0, 0, 0, 0) << endl;

//
    printf ("%lld\n", calc (b) - calc (a) + is_balanced (b));


}
