#include <bits/stdc++.h>
using namespace std;
int fst[10], n, mx, num[20];
long long mem[20][1 << (18)][2];
long long dp(int pos, int mask, bool f) {
  if (pos == n) return ((mask & mx) == mx);
  long long ret = mem[pos][mask][f];
  if (ret != -1) return ret;
  ret = 0;
  if (!f) ret = dp(pos + 1, mask, f);
  bool temp[10];
  for (int i = 0; i < 10; i++) temp[i] = 0;
  for (int i = 0; i < n; i++) {
    if (!f && !num[i]) continue;
    if (!(mask & (1 << (i))) && !temp[num[i]]) {
      temp[num[i]] = 1;
      if (mask & (1 << (fst[num[i]])))
        ret += dp(pos + 1, mask | (1 << (i)), 1);
      else
        ret += dp(pos + 1, mask | (1 << (fst[num[i]])), 1);
    }
  }
  return mem[pos][mask][f] = ret;
}
int main() {
  long long m;
  scanf("%lld", &m);
  n = 0;
  while (m) {
    num[n++] = (m % 10ll);
    m /= 10ll;
  }
  reverse(num, num + n);
  for (int i = n - 1; i >= 0; i--) fst[num[i]] = i;
  mx = 0;
  for (int i = 0; i < n; i++) mx |= (1 << (fst[num[i]]));
  memset(mem, -1, sizeof mem);
  printf("%lld\n", dp(0, 0, 0));
  return 0;
}
