#include <bits/stdc++.h>
using namespace std;
void ga(int N, int *A) {
  for (int i(0); i < N; i++) scanf("%d", A + i);
}
long long L, R, T, l, r;
int I, f[11], V[20], W[20], J, o, F[11];
bool rec(int i, bool x, bool y) {
  if (!~i) return 1;
  int p = y ? 0 : V[i], q = x ? 10 : W[i];
  for (int k(p + 1); k < q; k++)
    if (f[k]) return 1;
  if (f[p] || f[q]) {
    if (f[p] && p == q) {
      --f[p];
      if (rec(i - 1, x, y)) return 1;
      ++f[p];
      return 0;
    }
    if (f[p]) {
      --f[p];
      if (rec(i - 1, 1, y)) return 1;
      ++f[p];
    }
    if (f[q]) {
      --f[q];
      if (rec(i - 1, x, 1)) return 1;
      ++f[p];
    }
    return 0;
  } else
    return 0;
  assert(0);
}
bool ok() {
  int g = o + 1;
  (memset(f, 0, sizeof(f)));
  memcpy(f, F, sizeof(F));
  while (g < I) ++g, ++f[0];
  if (g > I) return 0;
  return rec(g - 1, 0, 0);
}
void dyn(int u, int d) {
  if (!~u) {
    T += ok();
    return;
  }
  for (int k(d); k < 10; k++) ++F[k], dyn(u - 1, k), --F[k];
}
int main(void) {
  scanf("%lld%lld", &L, &R), l = L, r = R;
  for (int i(0); i < 20; i++) V[i] = l % 10, l /= 10, W[i] = r % 10, r /= 10;
  for (int i(0); i < 20; i++)
    if (V[i]) J = i;
  ++J;
  for (int i(0); i < 20; i++)
    if (W[i]) I = i;
  ++I;
  for (int i(0); i < 18; i++) dyn(o = i, 1);
  printf("%lld\n", T);
  return 0;
}
