#include <bits/stdc++.h>
using namespace std;
int c[10];
int c0[10];
string n;
long long fact[21];
int cc[10];
map<string, int> mpp;
long long getcount() {
  long long num = fact[accumulate(c, c + 10, 0)];
  long long deno = 1, ans;
  for (int i = 0; i < 10; i++) {
    num = num / fact[c[i]];
  }
  return num;
}
long long getans(string s) {
  for (int i = 0; i < 10; i++) {
    c[i] = 0;
  }
  for (int i = 0; i < s.length(); i++) {
    c[s[i] - '0']++;
  }
  for (int i = 0; i < 10; i++)
    if (c0[i] && !c[i]) return 0;
  sort(s.begin(), s.end());
  if (mpp[s] == 1) return 0;
  mpp[s] = 1;
  long long ans = getcount();
  if (c[0] > 0) {
    c[0]--;
    ans = ans - getcount();
  }
  return ans;
}
int main() {
  cin >> n;
  string tt;
  int cnt = 0;
  fact[0] = 1;
  for (int i = 1; i < 20; i++) {
    fact[i] = fact[i - 1] * i;
  }
  for (int i = 0; i < n.length(); i++) {
    c0[n[i] - '0']++;
  }
  int k = n.length();
  long long ans = 0;
  for (int i = 1; i < (1 << k); i++) {
    string s;
    for (int j = 0; j < k; j++) {
      if (i & (1 << j)) {
        s += n[j];
      }
    }
    long long x = getans(s);
    ans = ans + x;
  }
  cout << ans << endl;
}
