#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 19
char strL[N+1], strR[N+1];
int l, r, i, n, j, sum, k;
int bufL[N] = {0}, bufR[N] = {0};
int *L, *R;
int num[10] = {0}, has[10] = {0};
int ok(void) {
if(n == 0) {
return 1;
}
for(j = 0; j < 10; j++) {
has[j] = num[j];
}
for(j = L[0]+1; j < R[0]; j++) {
if(has[j] > 0) {
return 1;
}
}
if(has[L[0]] > 0) {
has[L[0]]–;
for(i = 1; i < n+1; i++) {
if(i >= n) {
return 1;
}
for(j = L[i]+1; j < 10; j++) {
if(has[j] > 0) {
return 1;
}
}
if(has[L[i]] > 0) {
has[L[i]]–;
} else {
break;
}
}
}
for(j = 0; j < 10; j++) {
has[j] = num[j];
}
if(has[R[0]] > 0) {
has[R[0]]–;
for(i = 1; i < n+1; i++) {
if(i >= n) {
return 1;
}
for(j = 0; j < R[i]; j++) {
if(has[j] > 0) {
return 1;
}
}
if(has[R[i]] > 0) {
has[R[i]]–;
} else {
break;
}
}
}
return 0;
}
int main(void) {
scanf(“%s%s”, strL, strR);
l = strlen(strL);
r = strlen(strR);
L = bufL;
R = bufR;
for(i = 0; i < l; i++) {
L[N-l+i] = strL[i] – ‘0’;
}
for(i = 0; i < r; i++) {
R[N-r+i] = strR[i] – ‘0’;
}
for(i = 0; i < N && L[i] == R[i]; i++);
L += i;
R += i;
n = N – i;
sum = 0;
k = 0;
while(1) {
for(j = 0; sum > n; j++) {
if(j >= 8) {
goto finish;
}
sum -= num[j];
num[j] = 0;
num[j+1]++;
sum++;
}
num[9] = n – sum;
/*
for(j = 0; j < 10; j++) {
for(i = 0; i < num[j]; i++) {
printf(“%d”, j);
}
}
*/
if(ok()) {
//printf(” ok”);
k++;
}
//printf(“\n”);
num[0]++;
sum++;
}
finish:
printf(“%d\n”, k);
return 0;
}