Bus Number
Contest: Codeforces Round 491 (Div. 2)
Difficulty rating: 1800
Tags: brute force, combinatorics, math

This night wasn't easy on Vasya. His favorite team lost, and he didn't find himself victorious either — although he played perfectly, his teammates let him down every time. He had to win at least one more time, but the losestreak only grew longer and longer... It's no wonder he didn't get any sleep this night at all.

In the morning, Vasya was waiting the bus to the university on the bus stop. Vasya's thoughts were hazy and so he couldn't remember the right bus' number quite right and got onto the bus with the number $$$n$$$.

In the bus, Vasya thought that he could get the order of the digits in the number of the bus wrong. Futhermore, he could "see" some digits several times, but the digits he saw were definitely in the real number of the bus. For example, if Vasya saw the number 2028, it could mean that the real bus number could be 2028, 8022, 2820 or just 820. However, numbers 80, 22208, 52 definitely couldn't be the number of the bus. Also, real bus number couldn't start with the digit 0, this meaning that, for example, number 082 couldn't be the real bus number too.

Given $$$n$$$, determine the total number of possible bus number variants.

Input format:
The first line contains one integer $$$n$$$ ($$$1 \leq n \leq 10^{18}$$$) — the number of the bus that was seen by Vasya. It is guaranteed that this number does not start with $$$0$$$.

Output format:
Output a single integer — the amount of possible variants of the real bus number.

Constraints:
Time limit: 1.0 s
Memory limit: 256.0 MB

Note:
In the first sample, only variants $$$97$$$ and $$$79$$$ are possible.

In the second sample, the variants (in the increasing order) are the following: $$$208$$$, $$$280$$$, $$$802$$$, $$$820$$$, $$$2028$$$, $$$2082$$$, $$$2208$$$, $$$2280$$$, $$$2802$$$, $$$2820$$$, $$$8022$$$, $$$8202$$$, $$$8220$$$.

Example input:
97

Example output:
2

Example input:
2028

Example output:
13

Editorial:
Из условия следует, что цифры оригинального номера автобуса представляют собой некоторое подмножество цифр номера, увиденного Васей. Перебрать подмножество цифр можно стандартным алгоритмом за $$$2^{k}$$$ операций (где $$$k$$$ — длина числа $$$n$$$). При этом каждое подмножество нужно проверить на корректность (содержит ли оно все нужные цифры) и привести к "каноническому" виду (например, отсортировать), чтобы избежать повторений с подмножествами, отличающимися лишь порядком цифр. Среди корректных наборов нужно оставить только уникальные.
Теперь для выбранного набора цифр нужно посчитать количество вариантов номера автобуса. Это можно сделать за $$$O(k)$$$, использовав стандартную формулу числа перестановок мультимножества (см. секцию "Permutations of multisets" в статье про перестановки: https://en.wikipedia.org/wiki/Permutation и мультиномиальные коэффициенты https://en.wikipedia.org/wiki/Multinomial_theorem)
$$$C = k!/(c_0!*c_1!*...*c_9!)$$$,
где $$$k$$$ — общее количество цифр в наборе, а $$$c_i$$$ — количество цифр $$$i$$$ в наборе.
Из этого числа нужно вычесть количество номеров, начинающихся на $$$0$$$, если $$$0$$$ присутствует в наборе. Сделать это достаточно просто: если мы поставим на первое место $$$0$$$, то достаточно уменьшить $$$k$$$ на $$$1$$$ и $$$c_0$$$ на 1, после чего применить формулу выше — она посчитает количество способов разместить остальные цифры набора.
Итого, даже при грубой оценке сложности и простой реализации получаем асимптотику $$$O(2^{k}*k)$$$, где $$$k \leq 19$$$ — количество цифр числа $$$n$$$.