"""simple docstring"""
import random
import sys

from . import cryptomath_module as cryptomath

lowercase__   			=      (
    r' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`'
    r'abcdefghijklmnopqrstuvwxyz{|}~'
)







def 		__a  (      _SCREAMING_SNAKE_CASE						,	_SCREAMING_SNAKE_CASE						,	_SCREAMING_SNAKE_CASE  )      ->None:
  if mode == "encrypt":
    if key_a == 1:
      sys.exit(
          'The affine cipher becomes weak when key '
          'A is set to 1. Choose different key'  )
    if key_b == 0:
      sys.exit(
          'The affine cipher becomes weak when key '
          'B is set to 0. Choose different key'  )
  if key_a < 0 or key_b < 0 or key_b > len(_SCREAMING_SNAKE_CASE  ) - 1:
    sys.exit(
        'Key A must be greater than 0 and key B must '
        F'be between 0 and {len(_SCREAMING_SNAKE_CASE  ) - 1}.'  )
  if cryptomath.gcd(_SCREAMING_SNAKE_CASE						,	len(_SCREAMING_SNAKE_CASE  )  ) != 1:
    sys.exit(
        F'Key A {key_a} and the symbol set size {len(_SCREAMING_SNAKE_CASE  )} '
        'are not relatively prime. Choose a different key.'  )







def 		__a  (      _SCREAMING_SNAKE_CASE						,	_SCREAMING_SNAKE_CASE  )      ->str:
  a__				,       a__:	Optional[Any]     				=      divmod(_SCREAMING_SNAKE_CASE						,	len(_SCREAMING_SNAKE_CASE  )  )
  check_keys(_SCREAMING_SNAKE_CASE						,	_SCREAMING_SNAKE_CASE						,	'encrypt'  )
  a__:	Dict     				=      ''
  for symbol in message:
    if symbol in SYMBOLS:
      a__:	int     				=      SYMBOLS.find(_SCREAMING_SNAKE_CASE  )
      cipher_text += SYMBOLS[(sym_index * key_a + key_b) % len(_SCREAMING_SNAKE_CASE  )]
    else:
      cipher_text += symbol
  return cipher_text







def 		__a  (      _SCREAMING_SNAKE_CASE						,	_SCREAMING_SNAKE_CASE  )      ->str:
  a__				,       a__:	List[str]     				=      divmod(_SCREAMING_SNAKE_CASE						,	len(_SCREAMING_SNAKE_CASE  )  )
  check_keys(_SCREAMING_SNAKE_CASE						,	_SCREAMING_SNAKE_CASE						,	'decrypt'  )
  a__:	List[Any]     				=      ''
  a__:	str     				=      cryptomath.find_mod_inverse(_SCREAMING_SNAKE_CASE						,	len(_SCREAMING_SNAKE_CASE  )  )
  for symbol in message:
    if symbol in SYMBOLS:
      a__:	List[str]     				=      SYMBOLS.find(_SCREAMING_SNAKE_CASE  )
      plain_text += SYMBOLS[
          (sym_index - key_b) * mod_inverse_of_key_a % len(_SCREAMING_SNAKE_CASE  )
      ]
    else:
      plain_text += symbol
  return plain_text







def 		__a  (      )      ->int:
  while True:
    a__:	int     				=      random.randint(2						,	len(_SCREAMING_SNAKE_CASE  )  )
    a__:	List[Any]     				=      random.randint(2						,	len(_SCREAMING_SNAKE_CASE  )  )
    if cryptomath.gcd(_SCREAMING_SNAKE_CASE						,	len(_SCREAMING_SNAKE_CASE  )  ) == 1 and key_b % len(_SCREAMING_SNAKE_CASE  ) != 0:
      return key_b * len(_SCREAMING_SNAKE_CASE  ) + key_b







def 		__a  (      )      ->None:
  a__:	Union[str, Any]     				=      input('Enter message: '  ).strip()
  a__:	List[Any]     				=      int(input('Enter key [2000 - 9000]: '  ).strip()  )
  a__:	List[Any]     				=      input('Encrypt/Decrypt [E/D]: '  ).strip().lower()

  if mode.startswith('e'  ):
    a__:	int     				=      'encrypt'
    a__:	List[str]     				=      encrypt_message(_SCREAMING_SNAKE_CASE						,	_SCREAMING_SNAKE_CASE  )
  elif mode.startswith('d'  ):
    a__:	Dict     				=      'decrypt'
    a__:	Any     				=      decrypt_message(_SCREAMING_SNAKE_CASE						,	_SCREAMING_SNAKE_CASE  )
  print(F'\n{mode.title()}ed text: \n{translated}'  )


if __name__ == "__main__":
 import doctest

 doctest.testmod()
 # main()



"""simple docstring"""




def 	UpperCAmelCase       (						UpperCamelCase__ = 100							,     UpperCamelCase__ = 100					):






							"""simple docstring"""





							return max(
							    sum(int(UpperCamelCase__					) for x in str(base**power					)					)
							    for base in range(UpperCamelCase__					)
							    for power in range(UpperCamelCase__					)					)


# Tests
if __name__ == "__main__":
				import doctest

				doctest.testmod()





