


__lowerCamelCase   	=  {
    '''A''': ('''ABCDEFGHIJKLM''', '''NOPQRSTUVWXYZ'''),
    '''B''': ('''ABCDEFGHIJKLM''', '''NOPQRSTUVWXYZ'''),
    '''C''': ('''ABCDEFGHIJKLM''', '''ZNOPQRSTUVWXY'''),
    '''D''': ('''ABCDEFGHIJKLM''', '''ZNOPQRSTUVWXY'''),
    '''E''': ('''ABCDEFGHIJKLM''', '''YZNOPQRSTUVWX'''),
    '''F''': ('''ABCDEFGHIJKLM''', '''YZNOPQRSTUVWX'''),
    '''G''': ('''ABCDEFGHIJKLM''', '''XYZNOPQRSTUVW'''),
    '''H''': ('''ABCDEFGHIJKLM''', '''XYZNOPQRSTUVW'''),
    '''I''': ('''ABCDEFGHIJKLM''', '''WXYZNOPQRSTUV'''),
    '''J''': ('''ABCDEFGHIJKLM''', '''WXYZNOPQRSTUV'''),
    '''K''': ('''ABCDEFGHIJKLM''', '''VWXYZNOPQRSTU'''),
    '''L''': ('''ABCDEFGHIJKLM''', '''VWXYZNOPQRSTU'''),
    '''M''': ('''ABCDEFGHIJKLM''', '''UVWXYZNOPQRST'''),
    '''N''': ('''ABCDEFGHIJKLM''', '''UVWXYZNOPQRST'''),
    '''O''': ('''ABCDEFGHIJKLM''', '''TUVWXYZNOPQRS'''),
    '''P''': ('''ABCDEFGHIJKLM''', '''TUVWXYZNOPQRS'''),
    '''Q''': ('''ABCDEFGHIJKLM''', '''STUVWXYZNOPQR'''),
    '''R''': ('''ABCDEFGHIJKLM''', '''STUVWXYZNOPQR'''),
    '''S''': ('''ABCDEFGHIJKLM''', '''RSTUVWXYZNOPQ'''),
    '''T''': ('''ABCDEFGHIJKLM''', '''RSTUVWXYZNOPQ'''),
    '''U''': ('''ABCDEFGHIJKLM''', '''QRSTUVWXYZNOP'''),
    '''V''': ('''ABCDEFGHIJKLM''', '''QRSTUVWXYZNOP'''),
    '''W''': ('''ABCDEFGHIJKLM''', '''PQRSTUVWXYZNO'''),
    '''X''': ('''ABCDEFGHIJKLM''', '''PQRSTUVWXYZNO'''),
    '''Y''': ('''ABCDEFGHIJKLM''', '''OPQRSTUVWXYZN'''),
    '''Z''': ('''ABCDEFGHIJKLM''', '''OPQRSTUVWXYZN'''),
}



def 			_a      (    __UpperCamelCase			):
     return [alphabet[char] for char in key.upper()]



def 			_a      (    __UpperCamelCase	,	__UpperCamelCase			):
     a_     :  Any				      =     """"""
     a_     :  Dict				      =     0
     a_     :  List[str]				      =     generate_table(__UpperCamelCase			)
     for char in words.upper():
          cipher += get_opponent(table[count]	,	__UpperCamelCase			)
          a_     :  Optional[Any]				      =     (count + 1) % len(__UpperCamelCase			)
     return cipher



def 			_a      (    __UpperCamelCase	,	__UpperCamelCase			):
     return encrypt(__UpperCamelCase	,	__UpperCamelCase			)



def 			_a      (    __UpperCamelCase	,	__UpperCamelCase			):
     a_     :  int				      =     0 if char in table[0] else 1
     a_     :  Optional[Any]				      =     table[row].index(__UpperCamelCase			)
     return row, col



def 			_a      (    __UpperCamelCase	,	__UpperCamelCase			):
     a_      ,      a_     :  Optional[Any]				      =     get_position(__UpperCamelCase	,	char.upper()			)
     if row == 1:
          return table[0][col]
     else:
          return table[1][col] if row == 0 else char


if __name__ == "__main__":
       import doctest

       doctest.testmod()  # Fist ensure that all our tests are passing...
       __lowerCamelCase   	=  input('''Enter key: ''').strip()
       __lowerCamelCase   	=  input('''Enter text to encrypt: ''').strip()
       __lowerCamelCase   	=  encrypt(key, text)

       print(f'''Encrypted: {cipher_text}''')
       print(f'''Decrypted with key: {decrypt(key, cipher_text)}''')








class 							lowerCAmelCase_		:







		def __init__(    self  :   int       ,		UpperCAmelCase_  :   int					)       ->		None:


						'''simple docstring'''







						_UpperCAmelCase						:  Tuple     					=	data
						_UpperCAmelCase						:  BinaryTreeNode | None     					=	None
						_UpperCAmelCase						:  BinaryTreeNode | None     					=	None


def 	_A	(   _UpperCamelCase      ,					_UpperCamelCase			):
				if node is None:
								_UpperCAmelCase						:  Union[str, Any]     					=	BinaryTreeNode(_UpperCamelCase			)
								return node

				# binary search tree is not empty,
				# so we will insert it into the tree
				# if new_value is less than value of data in node,
				#  add it to left subtree and proceed recursively
				if new_value < node.data:
								_UpperCAmelCase						:  Any     					=	insert(node.left_child      ,					_UpperCamelCase			)
				else:
								# if new_value is greater than value of data in node,
								#  add it to right subtree and proceed recursively
								_UpperCAmelCase						:  List[Any]     					=	insert(node.right_child      ,					_UpperCamelCase			)
				return node


def 	_A	(   _UpperCamelCase			):  # if node is None,return
				if node:
								_UpperCAmelCase						:  str     					=	inorder(node.left_child			)
								_UpperCAmelCase						:  Union[str, Any]     					=	[*inorder_array, node.data]
								_UpperCAmelCase						:  Optional[int]     					=	inorder_array + inorder(node.right_child			)
				else:
								_UpperCAmelCase						:  Tuple     					=	[]
				return inorder_array


def 	_A	(   ):
				_UpperCAmelCase						:  Dict     					=	insert(_UpperCamelCase      ,					15			)
				insert(_UpperCamelCase      ,					10			)
				insert(_UpperCamelCase      ,					25			)
				insert(_UpperCamelCase      ,					6			)
				insert(_UpperCamelCase      ,					14			)
				insert(_UpperCamelCase      ,					20			)
				insert(_UpperCamelCase      ,					60			)
				return root


def 	_A	(   ):
				# main function
				_UpperCAmelCase						:  Tuple     					=	make_tree()
				print('''Printing values of binary search tree in Inorder Traversal.'''			)
				inorder(_UpperCamelCase			)


if __name__ == "__main__":
					import doctest

					doctest.testmod()
					main()
