






"""simple docstring"""


_UpperCamelCase :    Tuple      =			{
    """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_				:					str		)	->		list[tuple[str, str]]:
 return [alphabet[char] for char in key.upper()]




def 					a			(  UpperCamelCase_				:					str  ,						UpperCamelCase_				:					str		)	->		str:
 __A						:							str      =						''
 __A						:							Optional[int]      =						0
 __A						:							Optional[Any]      =						generate_table(UpperCamelCase_		)
 for char in words.upper():
  cipher += get_opponent(table[count]  ,						UpperCamelCase_		)
  __A						:							Optional[int]      =						(count + 1) % len(UpperCamelCase_		)
 return cipher




def 					a			(  UpperCamelCase_				:					str  ,						UpperCamelCase_				:					str		)	->		str:
 return encrypt(UpperCamelCase_  ,						UpperCamelCase_		)




def 					a			(  UpperCamelCase_				:					tuple[str, str]  ,						UpperCamelCase_				:					str		)	->		tuple[int, int]:
 __A						:							Tuple      =						0 if char in table[0] else 1
 __A						:							Any      =						table[row].index(UpperCamelCase_		)
 return row, col




def 					a			(  UpperCamelCase_				:					tuple[str, str]  ,						UpperCamelCase_				:					str		)	->		str:
 __A     ,       __A						:							str      =						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...
   _UpperCamelCase :    Any      =			input("""Enter key: """).strip()
   _UpperCamelCase :    Any      =			input("""Enter text to encrypt: """).strip()
   _UpperCamelCase :    List[str]      =			encrypt(key, text)

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













"""simple docstring"""


import torch
from torch import autograd






class __a ( autograd.Function					):



  @staticmethod
  def     A_					(lowercase_	:		Optional[Any]					,      lowercase_	:		torch.tensor					,      lowercase_	:		float					,      lowercase_	:		bool )		->				List[str]:
   __A						:							str      =						inputs.numel()
   __A						:							str      =						int(0.005 * nb_elems ) + 1
   if sigmoid:
    __A						:							Dict      =						(torch.sigmoid(lowercase_ ) > threshold).type(inputs.type() )
   else:
    __A						:							Tuple      =						(inputs > threshold).type(inputs.type() )
   if mask.sum() < nb_min:
    # We limit the pruning so that at least 0.5% (half a percent) of the weights are remaining
    __A						:							Any      =						inputs.flatten().kthvalue(max(nb_elems - nb_min					,      1 ) ).values
    __A						:							Union[str, Any]      =						(inputs > k_threshold).type(inputs.type() )
   return mask



  @staticmethod
  def     A_					(lowercase_	:		str					,      lowercase_	:		Any )		->				int:
   return gradOutput, None, None






class __a ( autograd.Function					):



  @staticmethod
  def     A_					(lowercase_	:		List[Any]					,      lowercase_	:		torch.tensor					,      lowercase_	:		float )		->				Dict:
   __A						:							List[Any]      =						inputs.clone()
   __A     ,       __A						:							Optional[int]      =						inputs.flatten().sort(descending=lowercase_ )
   __A						:							Tuple      =						int(threshold * inputs.numel() )

   # flat_out and mask access the same memory.
   __A						:							Optional[Any]      =						mask.flatten()
   __A						:							Dict      =						0
   __A						:							Any      =						1
   return mask



  @staticmethod
  def     A_					(lowercase_	:		Tuple					,      lowercase_	:		Optional[Any] )		->				str:
   return gradOutput, None






class __a ( snake_case_					):



  @staticmethod
  def     A_					(lowercase_	:		torch.tensor					,      lowercase_	:		float )		->				List[str]:
   __A						:							List[str]      =						inputs.clone()
   __A     ,       __A						:							List[Any]      =						inputs.abs().flatten().sort(descending=lowercase_ )
   __A						:							Dict      =						int(threshold * inputs.numel() )

   # flat_out and mask access the same memory.
   __A						:							List[Any]      =						mask.flatten()
   __A						:							Dict      =						0
   __A						:							Tuple      =						1
   return mask





