#include <cstdio>
#define min(a, b) (((a)<(b))?(a):(b))
#define max(a, b) (((b)<(a))?(a):(b))
typedef unsigned long long ui64_t;
typedef unsigned int ui32_t;
ui32_t DigitsCount[10], TotalDigits;
const ui64_t Pow10[21]={1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000ull, 100000000000ull, 1000000000000ull,
                        10000000000000ull, 100000000000000ull, 1000000000000000ull, 10000000000000000ull,
                        100000000000000000ull, 1000000000000000000ull, 10000000000000000000ull, -1ull};
inline ui64_t Factorial(ui64_t Num){
    ui64_t Res=1, i;
    for(i=2;i<=Num;i++) Res*=i;
    return Res;
}
ui32_t Left;
inline static ui64_t Count(ui64_t Max){
    if(Left==0) return 1;
    ui32_t Digit;
    ui64_t Res=0, T;
    if(Max==Pow10[Left]-1){
        Res=Factorial(Left)/Factorial(DigitsCount[0]);
        Res/=Factorial(DigitsCount[1]);
        Res/=Factorial(DigitsCount[2]);
        Res/=Factorial(DigitsCount[3]);
        Res/=Factorial(DigitsCount[4]);
        Res/=Factorial(DigitsCount[5]);
        Res/=Factorial(DigitsCount[6]);
        Res/=Factorial(DigitsCount[7]);
        Res/=Factorial(DigitsCount[8]);
        Res/=Factorial(DigitsCount[9]);
        return Res;
    }
    Left--;
    T=Max/Pow10[Left];
    for(Digit=0;Digit<T;Digit++){
        if(DigitsCount[Digit]==0) continue;
        DigitsCount[Digit]--;
        Res+=Count(Pow10[Left]-1);
        DigitsCount[Digit]++;
    }
    if(DigitsCount[Digit]!=0){
        DigitsCount[Digit]--;
        Res+=Count(Max%Pow10[Left]);
        DigitsCount[Digit]++;
    }
    Left++;
    return Res;
}
inline static ui64_t CountBalanced(ui64_t DigitToDo, ui64_t DigitsLeft, ui64_t Min, ui64_t Max){
    if(DigitToDo==10){
        if(DigitsLeft==0){
            Left=TotalDigits;
            return Count(min(Max, Pow10[TotalDigits]-1))-Count(max(Min, Pow10[TotalDigits-1])-1);
        }
        else return 0;
    }
    ui32_t i;
    ui64_t Res=0;
    if(DigitToDo%2==0){
        DigitsCount[DigitToDo]=0;
        Res+=CountBalanced(DigitToDo+1, DigitsLeft, Min, Max);
        for(i=1;i<=DigitsLeft;i+=2){
            DigitsCount[DigitToDo]=i;
            TotalDigits+=i;
            Res+=CountBalanced(DigitToDo+1, DigitsLeft-i, Min, Max);
            TotalDigits-=i;
        }
    }else{
        for(i=0;i<=DigitsLeft;i+=2){
            DigitsCount[DigitToDo]=i;
            TotalDigits+=i;
            Res+=CountBalanced(DigitToDo+1, DigitsLeft-i, Min, Max);
            TotalDigits-=i;
        }
    }
    return Res;
}
ui32_t i, j, k;
ui64_t Min, Max;
int main(){
    scanf("%llu %llu", &Min, &Max);
    ui64_t Res=0;
    for(j=0;Pow10[j]<=Min;j++);
    for(k=0;Pow10[k]<=Max;k++);
    for(i=j;i<=k;i++){
        Res+=CountBalanced(0, i, Min, Max);
    }
    printf("%llu\n", Res);
    return 0;
}
