#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

bool us[128][128];
unsigned long long comb[128][128];

bool iss[32];
unsigned long long sol[32];
int la, lb;
char a[32], b[32];

unsigned long long getComb( int n, int k )
{
    if ( ( n == 0 ) && ( k == 0 ) ) return 1;
    if ( n == 0 ) return 0;
    if ( k == 0 ) return 1;
    if ( k > n ) return 0;
    if ( us[n][k] == 1 )
        return comb[n][k];
    comb[n][k] = getComb( n-1, k ) + getComb( n-1, k-1 );
    us[n][k] = 1;
//    cout << "COMB " << n << " " << k << " " << comb[n][k] << endl;
    return comb[n][k];
}

unsigned long long calc( int brc, int ori[10], int put[10], int ld )
{
//    cout << "CA " << brc << " " << ld << endl;
    int i, j, k;
    int num;
    unsigned long long r = 0;
    num = brc;
    for ( i = 0; i < ld; i++ )
    {
            if ( ( i%2 == 1 ) && ( (ori[i]+put[i])%2 == 1 ) )
            {
                return 0;
            }
            if ( ( i%2 == 0 ) && ( (ori[i]+put[i]) > 0 ) && ( (ori[i]+put[i])%2 == 0 ) )
            {
                return 0;
            }
    }
    for ( i = ld; i <= 9; i++ )
        put[i] = 0;
    if ( ld == 9 )
    {
        put[9] = brc;
        brc = 0;
    }
    if ( brc == 0 )
    {
        r = 1;
        k = 0;
        for ( i = 0; i <= 9; i++ )
        {
            if ( ( i%2 == 1 ) && ( (ori[i]+put[i])%2 == 1 ) )
            {
                return 0;
            }
            if ( ( i%2 == 0 ) && ( (ori[i]+put[i]) > 0 ) && ( (ori[i]+put[i])%2 == 0 ) )
            {
                return 0;
            }
            k = k + put[i];
        }
        for ( i = 0; i <= 9; i++ )
        {
            r = r * getComb( k, put[i] );
            k = k - put[i];
        }
        return r;
    }
    j = ori[ld];
    for ( i = 0; i <= brc; i++ )
    {
        if ( ld % 2 == 1 )
        {
            if ( (j+i)%2 == 0 )
            {
                put[ld] = i;
                r = r + calc( brc-i, ori, put, ld+1 );
                put[ld] = 0;
            }
        }
        else if ( ld % 2 == 0 )
        {
            if ( ( j+i == 0 ) || ( (j+i)%2 == 1 ) )
            {
                put[ld] = i;
                r = r + calc( brc-i, ori, put, ld+1 );
                put[ld] = 0;
            }
        }
    }
    return r;
}

unsigned long long getSol( int x )
{
//    cout << "IN " << x << endl;
    if ( x == 0 ) return 0;
    if ( iss[x] == 1 )
        return sol[x];
    unsigned long long sl = 0;
    int i;
    int br[10], pu[10];
    memset( br, 0, sizeof( br ) );
//    cout << "SET\n";
    for ( i = 1; i <= 9; i++ )
    {
//        cout << i << endl;
        memset( br, 0, sizeof( br ) );
        br[i] = 1;
        memset( pu, 0, sizeof( pu ) );
        sl = sl + calc( x-1, br, pu, 0 );
//        cout << "TRY " << x << " " << i << " " << calc( x-1, br, pu, 0 ) << endl;
    }
    sl = sl + getSol( x-1 );
    sol[x] = sl;
    iss[x] = 1;
//    cout << "GS " << x << " " << sol[x] << endl;
    return sol[x];
}

int main()
{
    int i, j, k;
    int br[10], pu[10];
    unsigned long long ans, sa, sb;
    memset( us, 0, sizeof( us ) );
    memset( iss, 0, sizeof( iss ) );

    scanf( "%s", a );
    scanf( "%s", b );
    ans = 0;
    sa = 0; sb = 0;

    memset( br, 0, sizeof( br ) );
    la = strlen( a );
    sa = 0;
    sa = getSol( la-1 );
    for ( i = 0; i < la; i++ )
    {
//        cout << i << endl;
//        sa = sa + getSol( la-i-1 );
        for ( j = 0; j + '0' < a[i]; j++ )
        {
            if ( ( j == 0 ) && ( i == 0 ) ) continue;
            br[j]++;
            memset( pu, 0, sizeof( pu ) );
            sa = sa + calc( la-i-1, br, pu, 0 );
            br[j]--;
        }
        br[a[i]-'0']++;
    }

    memset( br, 0, sizeof( br ) );
    lb = strlen( b );
    sb = 0;
    sb = getSol( lb-1 );
    for ( i = 0; i < lb; i++ )
    {
//        cout << i << endl;
//        sb = sb + getSol( lb-i-1 );
//        cout << "END\n";
        for ( j = 0; j + '0' < b[i]; j++ )
        {
//            cout << j << endl;
            if ( ( j == 0 ) && ( i == 0 ) ) continue;
            br[j]++;
            memset( pu, 0, sizeof( pu ) );
            sb = sb + calc( lb-i-1, br, pu, 0 );
//            cout << "CA " << i << " " << j << " " << lb-i-1 << " " << calc( lb-i-1, br, pu, 0 ) << endl;
            br[j]--;
        }
        br[b[i]-'0']++;
    }
//    cout << "A " << sb << endl;
        for ( i = 0; i <= 9; i++ )
        {
            if ( ( i%2 == 1 ) && ( (br[i])%2 == 1 ) )
                break;
            if ( ( i%2 == 0 ) && ( br[i] > 0 ) && ( br[i]%2 == 0 ) )
                break;
        }
        if ( i > 9 ) sb++;
//    cout << "B " << sb << endl;
    //sb = sb + calc( 0, br, 0 );
//    cout << sa << endl;
    ans = sb-sa;
//    cout << a << " " << b << " " << sa << " " << sb << endl;
    cout << ans << endl;
    return 0;
}
