code: 
  
  
  
  from __future__ import annotations
  
  from string import ascii_letters
  
  
  
  
  
  
  def 			__lowercase     (				a__							,     a__							,     a__ = None     )       ->				str:
  							__SCREAMING_SNAKE_CASE								=      alphabet or ascii_letters
  
  							# The final result string
  							__SCREAMING_SNAKE_CASE								=      ''
  
  							for character in input_string:
  														if character not in alpha:
  																					# Append without encryption if character is not in the alphabet
  																					result += character
  														else:
  																					# Get the index of the new key and make sure it isn't too large
  																					__SCREAMING_SNAKE_CASE								=      (alpha.index(a__     ) + key) % len(a__     )
  
  																					# Append the encoded character to the alphabet
  																					result += alpha[new_key]
  
  							return result
  
  
  
  
  
  
  def 			__lowercase     (				a__							,     a__							,     a__ = None     )       ->				str:
  							key *= -1
  
  							return encrypt(a__							,     a__							,     a__     )
  
  
  
  
  
  
  def 			__lowercase     (				a__							,     a__ = None     )       ->				dict[int, str]:
  							__SCREAMING_SNAKE_CASE								=      alphabet or ascii_letters
  
  							# To store data on all the combinations
  							__SCREAMING_SNAKE_CASE								=      {}
  
  							# Cycle through each combination
  							for key in range(1							,     len(a__     ) + 1     ):
  														# Decrypt the message and store the result in the data
  														__SCREAMING_SNAKE_CASE								=      decrypt(a__							,     a__							,     a__     )
  
  							return brute_force_data
  
  
  if __name__ == "__main__":
  			while True:
  						print(F'''\n{'-' * 10}\n Menu\n{'-' * 10}''')
  						print(*['''1.Encrypt''', '''2.Decrypt''', '''3.BruteForce''', '''4.Quit'''], sep='''\n''')
  
  						# get user input
  						lowerCAmelCase__	:  Union[str, Any] 		=input('''\nWhat would you like to do?: ''').strip() or '''4'''
  
  						# run functions based on what the user chose
  						if choice not in ("1", "2", "3", "4"):
  									print('''Invalid choice, please enter a valid choice''')
  						elif choice == "1":
  									lowerCAmelCase__	:  List[str] 		=input('''Please enter the string to be encrypted: ''')
  									lowerCAmelCase__	:  List[str] 		=int(input('''Please enter off-set: ''').strip())
  
  									print(encrypt(input_string, key))
  						elif choice == "2":
  									lowerCAmelCase__	:  Dict 		=input('''Please enter the string to be decrypted: ''')
  									lowerCAmelCase__	:  Any 		=int(input('''Please enter off-set: ''').strip())
  
  									print(decrypt(input_string, key))
  						elif choice == "3":
  									lowerCAmelCase__	:  Optional[int] 		=input('''Please enter the string to be decrypted: ''')
  									lowerCAmelCase__	:  int 		=brute_force(input_string)
  
  									for key, value in brute_force_data.items():
  												print(F'''Key: {key} | Message: {value}''')
  
  						elif choice == "4":
  									print('''Goodbye.''')
  									break
style_context: 
  
  
  
  def 			__lowercase     (				a__     )       ->				int:
  							return int(a__     ) if x - int(a__     ) <= 0 else int(a__     ) + 1
  
  
  if __name__ == "__main__":
  			import doctest
  
  			doctest.testmod()
  
  
  
  
  
  
  