#include <bits/stdc++.h>
using namespace std;
int d[10], c[10], a[20], b[20], ans;
long long L, R;
int check() {
  for (int i = 0; i <= 9; i++) d[i] = c[i];
  for (int i = 18; i; i--) {
    for (int j = b[i] + 1; j < a[i]; j++)
      if (d[j]) return 1;
    if (b[i] == a[i]) {
      if (d[b[i]])
        d[b[i]]--;
      else
        return 0;
    } else {
      if (d[b[i]]) {
        d[b[i]]--;
        int Flag = 1;
        for (int j = i - 1, k = 9; j; j--) {
          while (!d[k]) k--;
          if (k != b[j]) {
            for (int l = j + 1; l <= i; l++) d[b[l]]++;
            if (k < b[j]) Flag = 0;
            break;
          }
          d[k]--;
        }
        if (Flag > 0) return 1;
      }
      if (d[a[i]]) {
        d[a[i]]--;
        for (int j = i - 1, k = 0; j; j--) {
          while (!d[k]) k++;
          if (k != a[j]) return k < a[j];
          d[k]--;
        }
        return 1;
      }
      return 0;
    }
  }
  return 1;
}
void dfs(int x, int y) {
  if (x == 9) {
    c[x] = y;
    if (check()) ans++;
    return;
  }
  for (int i = 0; i <= y; i++) {
    c[x] = i;
    dfs(x + 1, y - i);
  }
}
int main() {
  scanf("%lld%lld", &L, &R);
  if (L == 1e18) {
    puts("1");
    return 0;
  }
  if (R == 1e18) {
    R--;
    if (L > 1e17) ans++;
  }
  int len = 0;
  while (R) {
    a[++len] = R % 10;
    R /= 10;
  }
  len = 0;
  while (L) {
    b[++len] = L % 10;
    L /= 10;
  }
  dfs(0, 18);
  printf("%d\n", ans);
}
