#include <bits/stdc++.h>
using namespace std;
vector<int> L, R;
int n;
int ans;
int num[20], now[20];
bool has(int l, int r) {
  for (int e = l; e <= r; e++)
    if (num[e]) return true;
  return false;
}
bool check(int cur, int lflag, int rflag) {
  if (cur == n) return true;
  int l = L[cur], r = R[cur];
  if (lflag && rflag) {
    if (l == r) {
      if (num[l]) {
        num[l]--;
        if (check(cur + 1, 1, 1)) return true;
        num[l]++;
      }
      return false;
    }
    if (has(l + 1, r - 1)) return true;
    if (num[l]) {
      num[l]--;
      if (check(cur + 1, 1, 0)) return true;
      num[l]++;
    }
    if (num[r]) {
      num[r]--;
      if (check(cur + 1, 0, 1)) return true;
      num[r]++;
    }
  } else {
    if (lflag) {
      if (has(l + 1, 9)) return true;
      if (num[l]) {
        num[l]--;
        if (check(cur + 1, 1, 0)) return true;
        num[l]++;
      }
    } else if (rflag) {
      if (has(0, r - 1)) return true;
      if (num[r]) {
        num[r]--;
        if (check(cur + 1, 0, 1)) return true;
        num[r]++;
      }
    }
  }
  return false;
}
void brute_force(int cur, int sum) {
  if (cur == 10) {
    for (int e = 0; e < cur; e++) num[e] = now[e];
    num[0] += sum;
    ans += check(0, 1, 1);
    return;
  }
  for (int e = 0; e <= sum; e++) {
    now[cur] = e;
    brute_force(cur + 1, sum - e);
  }
}
int main() {
  long long l, r;
  cin >> l >> r;
  for (; r; r /= 10) R.push_back(r % 10);
  for (int e = 0; e < R.size(); e++, l /= 10) L.push_back(l % 10);
  reverse(R.begin(), R.end());
  reverse(L.begin(), L.end());
  n = R.size();
  brute_force(1, n);
  cout << ans << endl;
  return 0;
}
