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

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

Output

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

Examples

Input

97


Output

2


Input

2028


Output

13

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.
# Index es el índice que usamos para recorrer el array de repeticiones. 
# El taken es la cantidad de números que tenemos que usamos 
# para calcular el número de permutaciones. El invalids calcula la cantidad de 
# permutaciones repetidas en un primer momento, es decir
# los números que poseen los dígitos repetidos en igual posición, luego se usa
# para quitar de las respuesta los valores que tienen al 
# cero como valor inicial. Zeros es un contador de la cantidad de ceros que 
# tiene el número, usado para quitar de la repuesta los valores
# que tienen al cero como valor inicial. 
def solve (index,taken,invalids,zeros):
	# Cuando este construido el número, llegamos a su décimo 
	# índice pasaremos a calcular los valores válidos.
	if index >= 10:  
		global sol 
		 # Se agregan todas las permutaciones de los dígitos quitando todas las
		 #  que sean números repetidos.
		sol += fact[taken]//invalids
		# verificamos si tenemos valores de cero pare quitar de las respuestas 
		# los valores que tienen a 0 en la primera posición.
		if zeros > 0: 
			 # Quitamos de invalids todas las permutaciones del cero
			invalids = invalids//fact[zeros]
			 # Annadimos todas las repeticiones del cero excepto las que posean
			 # al cero en la primera posición, que quitaremos de sol más tarde
			invalids = invalids*fact[zeros-1]
			 # de solución restaremos todas las combinacinoes de dígitos
			 #  inválidas que tienen al cero en la primera posición.
			sol = sol - (fact[taken-1])//invalids
		return
	 # Se verifica si el dígito esta presente en el número.
	if rep[index] == 0:
		# Si el número n no posee al dígito se pasa a el próximo
		#  llamado con valores similares.
		solve (index+1,taken,invalids,zeros) 
	 # En este for se repiten los valores de cada dígito para asegurar que se 
	 # calculan todos los números que posean todos los dígitos con al menos una
	 # aparición.
	for x in range(1,rep[index]+1):
		# Se verifica si el dígito que se esta verificando es el 0
		if index != 0: 
			# Si no es el 0 se llama en el próximo dígito, con la cantidad de
			# valores tomados: taken segun la cantidad de repeticiones
			# x, y aumentamos la cantidad de valores no válidos en x!
			# sin agregar ceros.
			solve (index+1,taken+x,invalids*fact[x],zeros) 
														  
		else:
			# Se llama en el próximo dígito, con la cantidad de valores
			#  tomados: taken según la cantidad de repeticiones
			#  x, y aumentamos la
			# cantidad de valores no válidos en x!, sin agregar ceros.
			solve(index+1,taken+x,invalids*fact[x],x) 
													  

sol = 0
fact = [1] 
for i in range(1,20): 
	fact.append(fact[i-1]*i)
n = str(input()) 
rep = [0 for i in range(10)] 
for c in n:
	rep[int(c)] += 1 
solve(0,0,1,0) 
print (sol)


