#include <bits/stdc++.h>
using namespace std;
vector<int> L_digit, R_digit;
int num_digit[10];
bool found(int idx, bool L, bool R) {
  if ((!L && !R) || idx == L_digit.size()) {
    return 1;
  }
  int st = (L ? L_digit[idx] : 0);
  int ed = (R ? R_digit[idx] : 9);
  bool ret = 0;
  for (int i = st; i <= ed; i++) {
    if (num_digit[i]) {
      num_digit[i]--;
      ret |= found(idx + 1, L && (i == st), R && (i == ed));
      num_digit[i]++;
    }
  }
  return ret;
}
long long brute_force(int idx, int rem) {
  if (idx == 9) {
    num_digit[9] = rem;
    return found(0, 1, 1);
  }
  int ret = 0;
  for (int i = 0; i <= rem; i++) {
    num_digit[idx] = i;
    ret += brute_force(idx + 1, rem - i);
  }
  return ret;
}
long long solve(long long L, long long R) {
  while (L) {
    L_digit.push_back(L % 10);
    L /= 10;
  }
  while (R) {
    R_digit.push_back(R % 10);
    R /= 10;
  }
  while (L_digit.size() != R_digit.size()) {
    L_digit.push_back(0);
  }
  reverse(L_digit.begin(), L_digit.end());
  reverse(R_digit.begin(), R_digit.end());
  return brute_force(0, L_digit.size());
}
int main() {
  long long L, R;
  long long answer;
  scanf("%lld%lld", &L, &R);
  answer = solve(L, R);
  printf("%lld\n", answer);
  return 0;
}
