#include <bits/stdc++.h>
using namespace std;
template <typename T>
T gcd(T x, T y) {
  if (x < y) swap(x, y);
  while (y > 0) {
    T f = x % y;
    x = y;
    y = f;
  }
  return x;
}
long long a, b;
char sa[20], sb[20];
int nd[10];
int r = 0;
int x[10];
bool valid_sub(int i, bool matcha, bool matchb) {
  if (i == 19) return true;
  int fr = matcha ? sa[i] : 0;
  int to = matchb ? sb[i] : 9;
  for (int j = fr + matcha; j <= to - matchb; j++) {
    if (x[j] > 0) {
      return true;
    }
  }
  if (fr == to) {
    if (x[fr] < 1) return false;
    x[fr]--;
    if (valid_sub(i + 1, matcha, matchb)) return true;
    x[fr]++;
  } else {
    if (x[fr] > 0) {
      x[fr]--;
      if (valid_sub(i + 1, matcha, false)) return true;
      x[fr]++;
    }
    if (x[to] > 0) {
      x[to]--;
      if (valid_sub(i + 1, false, matchb)) return true;
      x[to]++;
    }
  }
  return false;
}
bool valid() {
  bool matcha = true, matchb = true;
  int n0 = 19;
  for (int i = 1; i <= 9; i++) n0 -= (x[i] = nd[i]);
  x[0] = n0;
  return valid_sub(0, true, true);
}
void inedible_tail_enum(int idx, int fr) {
  if (valid()) {
    r++;
  }
  if (idx < 19) {
    for (; fr <= 9; fr++) {
      nd[fr]++;
      inedible_tail_enum(idx + 1, fr);
      nd[fr]--;
    }
  }
}
int main(int argc, char *argv[]) {
  std::cin.sync_with_stdio(false);
  std::cin.tie(nullptr);
  cin >> a >> b;
  {
    sprintf(sa, "%019lld", a);
    sprintf(sb, "%019lld", b);
    for (int i = 0; i < 19; i++) sb[i] -= '0';
    for (int i = 0; i < 19; i++) sa[i] -= '0';
    r = 0;
    for (int i = 0; i < 10; i++) nd[i] = 0;
    inedible_tail_enum(0, 1);
    printf("%d\n", r);
  }
  return 0;
}
