#include <bits/stdc++.h>
using namespace std;
template <typename T>
void cmax(T& a, T b) {
  a = max(a, b);
}
template <typename T>
void cmin(T& a, T b) {
  a = min(a, b);
}
void _BG(const char* s) {}
template <typename T, typename... TT>
void _BG(const char* s, T a, TT... b) {
  for (int c = 0; *s && (c || *s != ','); ++s) {
    cerr << *s;
    switch (*s) {
      case '(':
      case '[':
      case '{':
        ++c;
        break;
      case ')':
      case ']':
      case '}':
        --c;
        break;
    }
  }
  cerr << " = " << a;
  if (*s) {
    cerr << ", ";
    _BG(++s, b...);
  } else
    cerr << endl;
}
bool RD(void) { return true; }
bool RD(char& a) { return scanf(" %c", &a) == 1; }
bool RD(char* a) { return scanf("%s", a) == 1; }
bool RD(double& a) { return scanf("%lf", &a) == 1; }
bool RD(int& a) { return scanf("%d", &a) == 1; }
bool RD(long long& a) { return scanf("%lld", &a) == 1; }
template <typename T, typename... TT>
bool RD(T& a, TT&... b) {
  return RD(a) && RD(b...);
}
void PT(const char a) { putchar(a); }
void PT(const char* a) { fputs(a, stdout); }
void PT(char* a) { fputs(a, stdout); }
void PT(const double a) { printf("%.16f", a); }
void PT(const int a) { printf("%d", a); }
void PT(const long long a) { printf("%lld", a); }
template <char sep = ' ', char end = '\n'>
void PL(void) {
  if (end) PT(end);
}
template <char sep = ' ', char end = '\n', typename T, typename... TT>
void PL(const T a, const TT... b) {
  PT(a);
  if (sizeof...(b) && sep) PT(sep);
  PL<sep, end>(b...);
}
string l, r, t;
int a[10], ans = 0;
bool ok() {
  for (int i(l[0] + 1), _B(r[0]); i < _B; ++i)
    if (a[i]) return 1;
  if (a[r[0]]) {
    --a[r[0]];
    t.clear();
    t.push_back(r[0]);
    for (int i(0), _B(10); i < _B; ++i)
      for (int j(0), _B(a[i]); j < _B; ++j) t.push_back(i);
    ++a[r[0]];
    if (t <= r) return 1;
  }
  if (a[l[0]]) {
    --a[l[0]];
    t.clear();
    t.push_back(l[0]);
    for (int i((10) - 1), _B(0); i >= _B; --i)
      for (int j(0), _B(a[i]); j < _B; ++j) t.push_back(i);
    ++a[l[0]];
    if (t >= l) return 1;
  }
  return 0;
}
void dfs(int s, int i) {
  if (i == 9) {
    a[i] = s;
    ans += ok();
    return;
  }
  for (a[i] = 0; a[i] <= s; ++a[i]) dfs(s - a[i], i + 1);
}
int main() {
  cin >> l >> r;
  if (l == r) {
    cout << "1\n";
    return 0;
  }
  reverse(l.begin(), l.end());
  reverse(r.begin(), r.end());
  while (((int)l.size()) < ((int)r.size())) l.push_back('0');
  for (; (l.back()) == (r.back()); l.pop_back(), r.pop_back())
    ;
  for (auto& x : l) x -= '0';
  for (auto& x : r) x -= '0';
  reverse(l.begin(), l.end());
  reverse(r.begin(), r.end());
  dfs(r.size(), 0);
  cout << ans << endl;
}
