
def      lowerCamelCase__       (       __lowerCAmelCase						:						str					,							__lowerCAmelCase						:						Optional[int]       ):




			"""simple docstring"""


			lowerCAmelCase_      			=			""
			for i in table:
						res += inp[i - 1]
			return res






def      lowerCamelCase__       (       __lowerCAmelCase						:						Any       ):




			"""simple docstring"""


			return data[1:] + data[0]






def      lowerCamelCase__       (       __lowerCAmelCase						:						Tuple					,							__lowerCAmelCase						:						Tuple       ):




			"""simple docstring"""


			lowerCAmelCase_      			=			""
			for i in range(len(__lowerCAmelCase       )       ):
						if a[i] == b[i]:
									res += "0"
						else:
									res += "1"
			return res






def      lowerCamelCase__       (       __lowerCAmelCase						:						Optional[int]					,							__lowerCAmelCase						:						str       ):




			"""simple docstring"""


			lowerCAmelCase_      			=			int("0b" + data[0] + data[-1]					,							2       )
			lowerCAmelCase_      			=			int("0b" + data[1:3]					,							2       )
			return bin(s[row][col]       )[2:]






def      lowerCamelCase__       (       __lowerCAmelCase						:						int					,							__lowerCAmelCase						:						str					,							__lowerCAmelCase						:						List[str]					,							__lowerCAmelCase						:						Optional[int]					,							__lowerCAmelCase						:						str       ):




			"""simple docstring"""


			lowerCAmelCase_      			=			message[:4]
			lowerCAmelCase_      			=			message[4:]
			lowerCAmelCase_      			=			apply_table(__lowerCAmelCase					,							__lowerCAmelCase       )
			lowerCAmelCase_      			=			xor(__lowerCAmelCase					,							__lowerCAmelCase       )
			lowerCAmelCase_      			=			apply_sbox(__lowerCAmelCase					,							temp[:4]       )  # noqa: E741
			lowerCAmelCase_      			=			apply_sbox(__lowerCAmelCase					,							temp[4:]       )
			lowerCAmelCase_      			=			"0" * (2 - len(__lowerCAmelCase       )) + l  # noqa: E741
			lowerCAmelCase_      			=			"0" * (2 - len(__lowerCAmelCase       )) + r
			lowerCAmelCase_      			=			apply_table(l + r					,							__lowerCAmelCase       )
			lowerCAmelCase_      			=			xor(__lowerCAmelCase					,							__lowerCAmelCase       )
			return temp + right


if __name__ == "__main__":
			_A     =  input("Enter 10 bit key: ")
			_A     =  input("Enter 8 bit message: ")

			_A     =  [6, 3, 7, 4, 8, 5, 10, 9]
			_A     =  [3, 5, 2, 7, 4, 10, 1, 9, 8, 6]
			_A     =  [2, 4, 3, 1]
			_A     =  [2, 6, 3, 1, 4, 8, 5, 7]
			_A     =  [4, 1, 3, 5, 7, 2, 8, 6]
			_A     =  [4, 1, 2, 3, 2, 3, 4, 1]
			_A     =  [[1, 0, 3, 2], [3, 2, 1, 0], [0, 2, 1, 3], [3, 1, 3, 2]]
			_A     =  [[0, 1, 2, 3], [2, 0, 1, 3], [3, 0, 1, 0], [2, 1, 0, 3]]

			# key generation
			_A     =  apply_table(key, paa_table)
			_A     =  temp[:5]
			_A     =  temp[5:]
			_A     =  left_shift(left)
			_A     =  left_shift(right)
			_A     =  apply_table(left + right, pa_table)
			_A     =  left_shift(left)
			_A     =  left_shift(right)
			_A     =  left_shift(left)
			_A     =  left_shift(right)
			_A     =  apply_table(left + right, pa_table)

			# encryption
			_A     =  apply_table(message, IP)
			_A     =  function(expansion, sa, sa, keya, temp)
			_A     =  temp[4:] + temp[:4]
			_A     =  function(expansion, sa, sa, keya, temp)
			_A     =  apply_table(temp, IP_inv)
			print("Cipher text is:", CT)

			# decryption
			_A     =  apply_table(CT, IP)
			_A     =  function(expansion, sa, sa, keya, temp)
			_A     =  temp[4:] + temp[:4]
			_A     =  function(expansion, sa, sa, keya, temp)
			_A     =  apply_table(temp, IP_inv)
			print("Plain text after decypting is:", PT)





import functools






def      lowerCamelCase__       (       __lowerCAmelCase						:						str					,							__lowerCAmelCase						:						str       ):




			"""simple docstring"""


			lowerCAmelCase_      			=			len(__lowerCAmelCase       )
			lowerCAmelCase_      			=			len(__lowerCAmelCase       )

			@functools.cache
			def min_distance(__lowerCAmelCase						:						int					,							__lowerCAmelCase						:						int       ) -> int:
						# if first word index is overflow - delete all from the second word
						if indexa >= len_worda:
									return len_worda - indexa
						# if second word index is overflow - delete all from the first word
						if indexa >= len_worda:
									return len_worda - indexa
						lowerCAmelCase_      			=			int(worda[indexa] != worda[indexa]       )  # current letters not identical
						return min(
						    1 + min_distance(indexa + 1					,							__lowerCAmelCase       )					,							1 + min_distance(__lowerCAmelCase					,							indexa + 1       )					,							diff + min_distance(indexa + 1					,							indexa + 1       )					,							)

			return min_distance(0					,							0       )


if __name__ == "__main__":
			import doctest

			doctest.testmod()



