#include <bits/stdc++.h>
using namespace std;
const int B = 10, N = 19;
long long L, R;
int cnt[B], a[B], ans, lft[N], rgt[N];
void divide(long long x, int *a) {
  for (int i = 0; i < (N); ++i) a[i] = x % B, x /= B;
}
inline bool check(int x, int l, int r) {
  if (l > r) return 0;
  return (x & ((1 << (r + 1)) - 1)) >> l;
}
int cal() {
  memcpy(a, cnt, sizeof(a));
  int s = 0;
  for (int i = 0; i < (B); ++i)
    if (a[i]) s |= 1 << i;
  bool away = false, err = false;
  for (int i = (N)-1; i >= (0); --i) {
    if (check(s, lft[i] + 1, away ? 9 : rgt[i] - 1)) return 1;
    if (!a[lft[i]]) {
      err = true;
      break;
    }
    if (!--a[lft[i]]) s ^= 1 << lft[i];
    away |= lft[i] != rgt[i];
  }
  if (!err) return 1;
  memcpy(a, cnt, sizeof(a));
  s = 0;
  for (int i = 0; i < (B); ++i)
    if (a[i]) s |= 1 << i;
  away = false, err = false;
  for (int i = (N)-1; i >= (0); --i) {
    if (check(s, away ? 0 : lft[i] + 1, rgt[i] - 1)) return 1;
    if (!a[rgt[i]]) {
      err = true;
      break;
    }
    if (!--a[rgt[i]]) s ^= 1 << rgt[i];
    away |= lft[i] != rgt[i];
  }
  if (!err) return 1;
  return 0;
}
void dfs(int c, int remain) {
  if (c == 9) {
    cnt[c] = remain;
    ans += cal();
  } else
    for (int i = 0; i < (remain + 1); ++i) cnt[c] = i, dfs(c + 1, remain - i);
}
int main() {
  cin >> L >> R;
  divide(L, lft);
  divide(R, rgt);
  ans = 0;
  dfs(0, 19);
  cout << ans << endl;
  return 0;
}
