#include <bits/stdc++.h>
using namespace std;
const int N = 50;
int l[N], r[N], num[N], nn[N], tn[N], tt[N];
int tot, now, ans;
long long L, R;
void check(int x) {
  for (int i = l[now] + 1; i <= r[now] - 1; i++)
    if (num[i]) {
      ans++;
      return;
    }
  for (int i = 1; i <= 9; i++) nn[i] = tn[i] = num[i];
  if (nn[r[now]]) {
    nn[r[now]]--;
    int wh = 9;
    for (int j = now + 1; j <= 19; j++) tt[j] = 0;
    for (int j = 19; j > 20 - x; j--) {
      while (!nn[wh]) wh--;
      tt[j] = wh;
      nn[wh]--;
    }
    bool fl = 1;
    for (int j = now + 1; j <= 19; j++) {
      if (tt[j] < r[j]) break;
      if (tt[j] > r[j]) {
        fl = 0;
        break;
      }
    }
    if (fl) {
      ans++;
      return;
    }
  }
  if (tn[l[now]] || !l[now]) {
    if (!l[now]) {
      if (now + x > 19) return;
    } else
      tn[l[now]]--, x--;
    int wh = 9;
    for (int j = now + 1; j <= 19; j++) tt[j] = 0;
    for (int j = now + 1; j <= now + x; j++) {
      while (!tn[wh]) wh--;
      tt[j] = wh;
      tn[wh]--;
    }
    for (int j = now + 1; j <= 19; j++) {
      if (tt[j] > l[j]) {
        ans++;
        return;
      }
      if (tt[j] < l[j]) return;
    }
    ans++;
  }
}
void dfs(int x, int wh) {
  check(x - 1);
  if (x > tot) return;
  for (int i = wh; i <= 9; i++) {
    num[i]++;
    dfs(x + 1, i);
    num[i]--;
  }
}
int main() {
  scanf("%lld%lld", &L, &R);
  for (int i = 19; i; i--) {
    l[i] = L % 10;
    L /= 10;
  }
  for (int i = 19; i; i--) {
    r[i] = R % 10;
    R /= 10;
  }
  for (now = 1; now <= 19; now++) {
    if (l[now] != r[now]) break;
    if (l[now]) tot++;
  }
  if (now == 20) {
    puts("1");
    return 0;
  }
  tot = min(18 - tot, 20 - now);
  dfs(1, 1);
  printf("%d\n", ans);
  return 0;
}
