#include <bits/stdc++.h>
using namespace std;
int ans, len;
string L, R;
int cnt[10], sm = 0;
int tmp[10], tmp2[10];
inline bool check() {
  cnt[0] = len - sm;
  memcpy(tmp, cnt, sizeof cnt);
  for (int i = 0; i < len; i++) {
    if (L[i] == R[i]) {
      if (!tmp[L[i] - '0']) {
        return 0;
      }
      tmp[L[i] - '0']--;
      if (i == len - 1) {
        return 1;
      }
    } else {
      for (int x = L[i] - '0' + 1; x < R[i] - '0'; x++) {
        if (tmp[x]) {
          return 1;
        }
      }
      if (tmp[L[i] - '0']) {
        memcpy(tmp2, tmp, sizeof tmp);
        tmp2[L[i] - '0']--;
        int mx = 9;
        for (int j = i + 1; j < len; j++) {
          while (!tmp2[mx]) {
            mx--;
          }
          if (mx > L[j] - '0' || (j == len - 1 && mx == L[j] - '0')) {
            return 1;
          }
          if (mx < L[j] - '0') {
            break;
          }
          tmp2[mx]--;
        }
        if (i == len - 1) {
          return 1;
        }
      }
      if (tmp[R[i] - '0']) {
        memcpy(tmp2, tmp, sizeof tmp);
        tmp2[R[i] - '0']--;
        int mn = 0;
        for (int j = i + 1; j < len; j++) {
          while (!tmp2[mn]) {
            mn++;
          }
          if (mn < R[j] - '0' || (j == len - 1 && mn == R[j] - '0')) {
            return 1;
          }
          if (mn > R[j] - '0') {
            break;
          }
          tmp2[mn]--;
        }
        if (i == len - 1) {
          return 1;
        }
      }
      return 0;
    }
  }
  return 1;
}
void go(int p) {
  if (p == 10) {
    ans += check();
    return;
  }
  while (sm <= len) {
    go(p + 1);
    cnt[p]++;
    sm++;
  }
  sm -= cnt[p];
  cnt[p] = 0;
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> L >> R;
  while (L.size() < R.size()) {
    L = "0" + L;
  }
  len = L.size();
  go(1);
  cout << ans << '\n';
}
