#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long l, r;
  cin >> l >> r;
  if (l == r) {
    cout << "1\n";
    return 0;
  }
  string ls = to_string(l), rs = to_string(r);
  while (ls.size() < rs.size()) ls.insert(ls.begin(), '0');
  while (!ls.empty() && ls.size() == rs.size() && ls[0] == rs[0]) {
    ls.erase(ls.begin());
    rs.erase(rs.begin());
  }
  l = stoll(ls);
  r = stoll(rs);
  for (int i = 0; i < ls.size(); i++) ls[i] -= '0';
  for (int i = 0; i < rs.size(); i++) rs[i] -= '0';
  int len = ls.size() + 9;
  int* v = new int[len];
  for (int i = 0; i < ls.size(); i++) v[i] = 0;
  for (int i = ls.size(); i < len; i++) v[i] = 1;
  long long ans = 0;
  int f2[10], f[10];
  do {
    fill(f, f + 10, 0);
    fill(f2, f2 + 10, 0);
    int cnt = 0;
    for (int j = 0; j < len; j++) {
      if (v[j])
        cnt++;
      else
        f[cnt]++;
    }
    bool good = false;
    for (int j = ls[0] + 1; j < rs[0]; j++) {
      if (f[j]) {
        good = true;
        break;
      }
    }
    if (!good && f[ls[0]]) {
      for (int i = 0; i < 10; i++) f2[i] = f[i];
      long long num = ls[0];
      f2[ls[0]]--;
      for (long long j = 9; j >= 0; j--)
        while (f2[j]--) num = num * 10 + j;
      if (l <= num && num <= r) good = true;
    }
    if (!good && f[rs[0]]) {
      for (int i = 0; i < 10; i++) f2[i] = f[i];
      long long num = rs[0];
      f2[rs[0]]--;
      for (long long j = 0; j <= 9; j++)
        while (f2[j]--) num = num * 10 + j;
      if (l <= num && num <= r) good = true;
    }
    ans += good;
  } while (next_permutation(v, v + len));
  cout << ans << "\n";
  return 0;
}
