#include <bits/stdc++.h>
using namespace std;
const long long inf = 1LL << 61;
const long long mod = 1000000007;
int ans = 0;
int L[20], R[20], a[20], b[20], n;
bool check(int l, int r) {
  if (l > r) return false;
  for (int i = l; i <= r; i++)
    if (b[i]) return true;
  return false;
}
bool judge(int idx, int lf, int rf) {
  if (idx > n) return true;
  int l = L[idx], r = R[idx];
  if (lf && rf) {
    if (l == r) {
      if (b[l]) {
        b[l]--;
        return judge(idx + 1, 1, 1);
      }
      return false;
    }
    if (check(l + 1, r - 1)) return true;
    if (b[l]) {
      b[l]--;
      if (judge(idx + 1, 1, 0)) return true;
      b[l]++;
    }
    if (b[r]) {
      b[r]--;
      if (judge(idx + 1, 0, 1)) return true;
      b[r]++;
    }
    return false;
  } else if (lf) {
    if (check(l + 1, 9)) return true;
    if (b[l]) {
      b[l]--;
      if (judge(idx + 1, 1, 0)) return true;
      b[l]++;
    }
    return false;
  } else if (rf) {
    if (check(0, r - 1)) return true;
    if (b[r]) {
      b[r]--;
      if (judge(idx + 1, 0, 1)) return true;
      b[r]++;
    }
    return false;
  }
  return false;
}
void dfs(int m, int sum) {
  if (m == 10) {
    memcpy(b, a, sizeof(a));
    b[0] += sum;
    if (judge(1, 1, 1)) {
      ans++;
    }
    return;
  }
  for (int i = 0; i <= sum; i++) {
    a[m] = i;
    dfs(m + 1, sum - i);
  }
}
int main() {
  std::ios::sync_with_stdio(false);
  long long l, r, t;
  cin >> l >> r;
  n = 0;
  t = r;
  while (r) {
    r = r / 10;
    n++;
  }
  r = t;
  memset(L, 0, sizeof(L)), memset(R, 0, sizeof(R));
  for (int i = n; i >= 1; i--) {
    L[i] = l % 10, l = l / 10;
    R[i] = r % 10, r = r / 10;
  }
  dfs(1, n);
  cout << ans << endl;
  return 0;
}
