






from functools import lru_cache





def 				snake_case  (     lowerCamelCase					):




	'''simple docstring'''







	__lowercase             =  2
	__lowercase             =  set()
	while i * i <= n:
		if n % i:
			i += 1
		else:
			n //= i
			factors.add(lowerCamelCase					)
	if n > 1:
		factors.add(lowerCamelCase					)
	return factors





@lru_cache
def 				snake_case  (     lowerCamelCase					):




	'''simple docstring'''







	return len(unique_prime_factors(lowerCamelCase					)					)





def 				snake_case  (     lowerCamelCase					):




	'''simple docstring'''







	return len(set(lowerCamelCase					)					) in (0, 1)





def 				snake_case  (     lowerCamelCase					):




	'''simple docstring'''







	__lowercase             =  2

	while True:
		# Increment each value of a generated range
		__lowercase             =  [base + i for i in range(lowerCamelCase					)]

		# Run elements through out unique_prime_factors function
		# Append our target number to the end.
		__lowercase             =  [upf_len(lowerCamelCase					) for x in group]
		checker.append(lowerCamelCase					)

		# If all numbers in the list are equal, return the group variable.
		if equality(lowerCamelCase					):
			return group

		# Increment our base variable by 1
		base += 1





def 				snake_case  (     lowerCamelCase = 4					):




	'''simple docstring'''







	__lowercase             =  run(lowerCamelCase					)
	return results[0] if len(lowerCamelCase					) else None


if __name__ == "__main__":
						print(solution())









def 				snake_case  (     lowerCamelCase					):




	'''simple docstring'''







	__lowercase             =  """"""
	for ch in key:
		if ch == " " or ch not in key_no_dups and ch.isalpha():
			key_no_dups += ch
	return key_no_dups





def 				snake_case  (     lowerCamelCase					):




	'''simple docstring'''







	__lowercase             =  [chr(i + 65					) for i in range(26					)]
	# Remove duplicate characters from key
	__lowercase             =  remove_duplicates(key.upper()					)
	__lowercase             =  len(lowerCamelCase					)
	# First fill cipher with key characters
	__lowercase             =  {alphabet[i]: char for i, char in enumerate(lowerCamelCase					)}
	# Then map remaining characters in alphabet to
	# the alphabet from the beginning
	for i in range(len(lowerCamelCase					)				,  26					):
		__lowercase             =  alphabet[i - offset]
		# Ensure we are not mapping letters to letters previously mapped
		while char in key:
			offset -= 1
			__lowercase             =  alphabet[i - offset]
		__lowercase             =  char
	return cipher_alphabet





def 				snake_case  (     lowerCamelCase				,  lowerCamelCase					):




	'''simple docstring'''







	return "".join(cipher_map.get(lowerCamelCase				,  lowerCamelCase					) for ch in message.upper()					)





def 				snake_case  (     lowerCamelCase				,  lowerCamelCase					):




	'''simple docstring'''







	__lowercase             =  {v: k for k, v in cipher_map.items()}
	return "".join(rev_cipher_map.get(lowerCamelCase				,  lowerCamelCase					) for ch in message.upper()					)





def 				snake_case  (     ):




	'''simple docstring'''







	__lowercase             =  input("""Enter message to encode or decode: """					).strip()
	__lowercase             =  input("""Enter keyword: """					).strip()
	__lowercase             =  input("""Encipher or decipher? E/D:"""					).strip()[0].lower()
	try:
		__lowercase             =  {"""e""": encipher, """d""": decipher}[option]
	except KeyError:
		raise KeyError("""invalid input option"""					)
	__lowercase             =  create_cipher_map(lowerCamelCase					)
	print(func(lowerCamelCase				,  lowerCamelCase					)					)


if __name__ == "__main__":
						import doctest

						doctest.testmod()
						main()

