#include <bits/stdc++.h>
using namespace std;
int a[20], s[20], c[20];
long long l, r;
vector<int> b;
int solve() {
  int cnt = 0;
  for (int i = 1; i < 10; i++) {
    cnt += a[i];
  }
  if (cnt > b.size()) {
    return 0;
  }
  a[0] = b.size() - cnt;
  int pos = b.size() - 1;
  while (pos >= 0) {
    if (a[b[pos]] > 0) {
      c[pos] = b[pos];
      a[b[pos]]--;
      pos--;
      continue;
    }
    int mv = 10;
    for (int i = 0; i < 10; i++) {
      if (a[i] > 0) {
        mv = i;
        break;
      }
    }
    while (pos < b.size() && mv >= b[pos]) {
      pos++;
      if (pos == b.size()) {
        return 0;
      }
      mv = min(mv, c[pos]);
      a[c[pos]]++;
    }
    int x = b[pos] - 1;
    while (x >= 0 && a[x] == 0) {
      x--;
    }
    c[pos] = x;
    a[x]--;
    pos--;
    x = 9;
    while (pos >= 0) {
      while (x >= 0 && a[x] == 0) {
        x--;
      }
      c[pos] = x;
      a[x]--;
      pos--;
    }
    break;
  }
  long long val = 0;
  for (int i = b.size() - 1; i >= 0; i--) {
    val = val * 10 + c[i];
  }
  return val >= l ? 1 : 0;
}
void dfs(int x, int left, int &ans) {
  if (x == 10) {
    if (left == 18) {
      return;
    }
    for (int i = 0; i < 10; i++) {
      s[i] = a[i];
    }
    ans += solve();
    for (int i = 0; i < 10; i++) {
      a[i] = s[i];
    }
    return;
  }
  for (int i = 0; i <= left; i++) {
    a[x] = i;
    dfs(x + 1, left - i, ans);
  }
}
int main() {
  scanf("%lld %lld", &l, &r);
  while (r > 0) {
    b.push_back(r % 10);
    r /= 10;
  }
  int ans = 0;
  dfs(1, 18, ans);
  printf("%d\n", ans);
  return 0;
}
