#include <iostream>
using namespace std;
int findNumbers(int number, int power);
int findPow(int base, int power);
int fact(int n);
int main() {
int n;
cin >> n;
cout << findNumbers(n, 1);
}
int findNumbers(int number, int power) {
int powerOf10 = findPow(10, power);
int numberTemp = number / (powerOf10/10);
cerr << powerOf10 << "\n";
int currentDigit = numberTemp % powerOf10; //errorLine
if (number/(powerOf10/10) == 0)
return 0;
int ans = findNumbers(number, power + 1);
int *digits = new int[10]();
for(int i = 0; i < 10; i++)
digits[i] = 0;
for(int i = power - 1; i > 0; i--) {
int power10temp = findPow(10, i);
int digitTemp = number % power10temp;
digits[digitTemp]++;
}
digits[currentDigit]++;
int numerator = fact(power - 1);
for(int i = currentDigit + 1; i < 10; i++) {
int denominator = 1;
if(digits[i] != 0) {
digits[i]--;
for(int j = 0; j < 10; j++) {
denominator = denominator * fact(digits[i]);
}
ans = ans + (numerator/denominator);
digits[i]++;
}
}
delete[] digits;
cout << ans << endl;
return ans;
}
int fact(int n) {
if (n <= 1)
return 1;
return n*fact(n-1);
}
int findPow(int base, int power) {
int ans = 1;
for(int i = 0; i < power; i++) {
ans = ans * base;
}
return ans;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IGZpbmROdW1iZXJzKGludCBudW1iZXIsIGludCBwb3dlcik7CmludCBmaW5kUG93KGludCBiYXNlLCBpbnQgcG93ZXIpOwppbnQgZmFjdChpbnQgbik7CgppbnQgbWFpbigpIHsKICAgIGludCBuOwogICAgY2luID4+IG47CiAgICBjb3V0IDw8IGZpbmROdW1iZXJzKG4sIDEpOwp9CgppbnQgZmluZE51bWJlcnMoaW50IG51bWJlciwgaW50IHBvd2VyKSB7CiAgICBpbnQgcG93ZXJPZjEwID0gZmluZFBvdygxMCwgcG93ZXIpOwogICAgaW50IG51bWJlclRlbXAgPSBudW1iZXIgLyAocG93ZXJPZjEwLzEwKTsKICAgIGNlcnIgPDwgcG93ZXJPZjEwIDw8ICJcbiI7CiAgICBpbnQgY3VycmVudERpZ2l0ID0gbnVtYmVyVGVtcCAlIHBvd2VyT2YxMDsgLy9lcnJvckxpbmUKCiAgICBpZiAobnVtYmVyLyhwb3dlck9mMTAvMTApID09IDApCiAgICAgICAgcmV0dXJuIDA7CgogICAgaW50IGFucyA9IGZpbmROdW1iZXJzKG51bWJlciwgcG93ZXIgKyAxKTsKICAgIGludCAqZGlnaXRzID0gbmV3IGludFsxMF0oKTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKQogICAgICAgIGRpZ2l0c1tpXSA9IDA7CiAgICBmb3IoaW50IGkgPSBwb3dlciAtIDE7IGkgPiAwOyBpLS0pIHsKICAgICAgICBpbnQgcG93ZXIxMHRlbXAgPSBmaW5kUG93KDEwLCBpKTsKICAgICAgICBpbnQgZGlnaXRUZW1wID0gbnVtYmVyICUgcG93ZXIxMHRlbXA7CiAgICAgICAgZGlnaXRzW2RpZ2l0VGVtcF0rKzsKICAgIH0KICAgIGRpZ2l0c1tjdXJyZW50RGlnaXRdKys7CiAgICBpbnQgbnVtZXJhdG9yID0gZmFjdChwb3dlciAtIDEpOwogICAgZm9yKGludCBpID0gY3VycmVudERpZ2l0ICsgMTsgaSA8IDEwOyBpKyspIHsKICAgICAgICBpbnQgZGVub21pbmF0b3IgPSAxOwogICAgICAgIGlmKGRpZ2l0c1tpXSAhPSAwKSB7CiAgICAgICAgICAgIGRpZ2l0c1tpXS0tOwogICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgMTA7IGorKykgewogICAgICAgICAgICAgICAgZGVub21pbmF0b3IgPSBkZW5vbWluYXRvciAqIGZhY3QoZGlnaXRzW2ldKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhbnMgPSBhbnMgKyAobnVtZXJhdG9yL2Rlbm9taW5hdG9yKTsKICAgICAgICAgICAgZGlnaXRzW2ldKys7CiAgICAgICAgfQogICAgfQogICAgZGVsZXRlW10gZGlnaXRzOwogICAgY291dCA8PCBhbnMgPDwgZW5kbDsKICAgIHJldHVybiBhbnM7Cn0KCmludCBmYWN0KGludCBuKSB7CiAgICBpZiAobiA8PSAxKQogICAgICAgIHJldHVybiAxOwogICAgcmV0dXJuIG4qZmFjdChuLTEpOwp9CgppbnQgZmluZFBvdyhpbnQgYmFzZSwgaW50IHBvd2VyKSB7CiAgICBpbnQgYW5zID0gMTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBwb3dlcjsgaSsrKSB7CiAgICAgICAgYW5zID0gYW5zICogYmFzZTsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0=