






from __future__ import annotations

from string import ascii_letters






def  UpperCAmelCase__						(    lowerCamelCase	:			str			,lowerCamelCase	:			int			,lowerCamelCase	:			str | None = None    ):
   lowerCamelCase									=alphabet or ascii_letters

   # The final result string
   lowerCamelCase									=""""""

   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
         lowerCamelCase									=(alpha.index(lowerCamelCase    ) + key) % len(lowerCamelCase    )

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

   return result






def  UpperCAmelCase__						(    lowerCamelCase	:			str			,lowerCamelCase	:			int			,lowerCamelCase	:			str | None = None    ):
   key *= -1

   return encrypt(lowerCamelCase			,lowerCamelCase			,lowerCamelCase    )






def  UpperCAmelCase__						(    lowerCamelCase	:			str			,lowerCamelCase	:			str | None = None    ):
   lowerCamelCase									=alphabet or ascii_letters

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

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

   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
      _UpperCAmelCase					:						int         =     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":
         _UpperCAmelCase					:						List[str]         =     input('Please enter the string to be encrypted: ')
         _UpperCAmelCase					:						Dict         =     int(input('Please enter off-set: ').strip())

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

         print(decrypt(input_string, key))
      elif choice == "3":
         _UpperCAmelCase					:						Optional[Any]         =     input('Please enter the string to be decrypted: ')
         _UpperCAmelCase					:						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







def  UpperCAmelCase__						(    lowerCamelCase	:			list    ):
   lowerCamelCase									=1.3
   lowerCamelCase									=len(lowerCamelCase    )
   lowerCamelCase									=False

   while not completed:
      # Update the gap value for a next comb
      lowerCamelCase									=int(gap / shrink_factor    )
      if gap <= 1:
         lowerCamelCase									=True

      lowerCamelCase									=0
      while index + gap < len(lowerCamelCase    ):
         if data[index] > data[index + gap]:
            # Swap values
            lowerCamelCase				,       lowerCamelCase									=data[index + gap], data[index]
            lowerCamelCase									=False
         index += 1

   return data


if __name__ == "__main__":
   import doctest

   doctest.testmod()

   _UpperCAmelCase					:						List[Any]         =     input('Enter numbers separated by a comma:\n').strip()
   _UpperCAmelCase					:						Optional[Any]         =     [int(item) for item in user_input.split(',')]
   print(comb_sort(unsorted))