





"""simple docstring"""


from __future__ import annotations

from string import ascii_letters





def 				a__      (	_UpperCAmelCase						,  _UpperCAmelCase						,  _UpperCAmelCase = None						)     ->	str:

 '''simple docstring'''






 snake_case__     				=					alphabet or ascii_letters

 # The final result string
 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
   snake_case__     				=					(alpha.index(_UpperCAmelCase						) + key) % len(_UpperCAmelCase						)

   # Append the encoded character to the alphabet
   result += alpha[new_key]

 return result





def 				a__      (	_UpperCAmelCase						,  _UpperCAmelCase						,  _UpperCAmelCase = None						)     ->	str:

 '''simple docstring'''






 key *= -1

 return encrypt(_UpperCAmelCase						,  _UpperCAmelCase						,  _UpperCAmelCase						)





def 				a__      (	_UpperCAmelCase						,  _UpperCAmelCase = None						)     ->	dict[int, str]:

 '''simple docstring'''






 snake_case__     				=					alphabet or ascii_letters

 # To store data on all the combinations
 snake_case__     				=					{}

 # Cycle through each combination
 for key in range(1						,  len(_UpperCAmelCase						) + 1						):
  # Decrypt the message and store the result in the data
  snake_case__     				=					decrypt(_UpperCAmelCase						,  _UpperCAmelCase						,  _UpperCAmelCase						)

 return brute_force_data


if __name__ == "__main__":
   while True:
      print(f'''\n{'-' * 1_0}\n Menu\n{'-' * 1_0}''')
      print(*["""1.Encrypt""", """2.Decrypt""", """3.BruteForce""", """4.Quit"""], sep="""\n""")

      # get user input
      a__       :  List[str]       		=					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":
         a__       :  List[Any]       		=					input("""Please enter the string to be encrypted: """)
         a__       :  List[str]       		=					int(input("""Please enter off-set: """).strip())

         print(encrypt(input_string, key))
      elif choice == "2":
         a__       :  int       		=					input("""Please enter the string to be decrypted: """)
         a__       :  List[str]       		=					int(input("""Please enter off-set: """).strip())

         print(decrypt(input_string, key))
      elif choice == "3":
         a__       :  Optional[int]       		=					input("""Please enter the string to be decrypted: """)
         a__       :  Union[str, Any]       		=					brute_force(input_string)

         for key, value in brute_force_data.items():
            print(f'''Key: {key} | Message: {value}''')

      elif choice == "4":
         print("""Goodbye.""")
         break








"""simple docstring"""


def 				a__      (	_UpperCAmelCase						,  _UpperCAmelCase						)     ->	int:

 '''simple docstring'''






 if len(_UpperCAmelCase						) < len(_UpperCAmelCase						):
  return levenshtein_distance(_UpperCAmelCase						,  _UpperCAmelCase						)

 if len(_UpperCAmelCase						) == 0:
  return len(_UpperCAmelCase						)

 snake_case__     				=					list(range(len(_UpperCAmelCase						) + 1						)						)

 for i, ca in enumerate(_UpperCAmelCase						):
  snake_case__     				=					[i + 1]

  for j, ca in enumerate(_UpperCAmelCase						):
   # Calculate insertions, deletions and substitutions
   snake_case__     				=					previous_row[j + 1] + 1
   snake_case__     				=					current_row[j] + 1
   snake_case__     				=					previous_row[j] + (ca != ca)

   # Get the minimum to append to the current row
   current_row.append(min(_UpperCAmelCase						,  _UpperCAmelCase						,  _UpperCAmelCase						)						)

  # Store the previous row
  snake_case__     				=					current_row

 # Returns the last element (distance)
 return previous_row[-1]


if __name__ == "__main__":
   a__       :  Optional[int]       		=					input("""Enter the first word:\n""").strip()
   a__       :  int       		=					input("""Enter the second word:\n""").strip()

   a__       :  Union[str, Any]       		=					levenshtein_distance(first_word, second_word)
   print(f'''Levenshtein distance between {first_word} and {second_word} is {result}''')

