
from __future__ import annotations






def 							UpperCAmelCase_		(							__SCREAMING_SNAKE_CASE			,							__SCREAMING_SNAKE_CASE			,							__SCREAMING_SNAKE_CASE			,							__SCREAMING_SNAKE_CASE							):
	lowercase  , lowercase					  =   m - 1, 0
	while i >= 0 and j < n:
		if key == mat[i][j]:
			print(F'''Key {key} found at row- {i + 1} column- {j + 1}'''							)
			return
		if key < mat[i][j]:
			i -= 1
		else:
			j += 1
	print(F'''Key {key} not found'''							)






def 							UpperCAmelCase_		(							):
	lowercase					  =   [[2, 5, 7], [4, 8, 13], [9, 11, 15], [12, 17, 20]]
	lowercase					  =   int(input('Enter the element to be searched:'							)							)
	print(__SCREAMING_SNAKE_CASE							)
	search_in_a_sorted_matrix(__SCREAMING_SNAKE_CASE			,							len(__SCREAMING_SNAKE_CASE							)			,							len(mat[0]							)			,							__SCREAMING_SNAKE_CASE							)


if __name__ == "__main__":
	import doctest

	doctest.testmod()
	main()



from string import ascii_uppercase






def 							UpperCAmelCase_		(							__SCREAMING_SNAKE_CASE			,							__SCREAMING_SNAKE_CASE			,							__SCREAMING_SNAKE_CASE = False			,							__SCREAMING_SNAKE_CASE = ascii_uppercase							):
	lowercase					  =   keyword.upper()
	lowercase					  =   plaintext.upper()
	lowercase					  =   set(__SCREAMING_SNAKE_CASE							)

	# create a list of unique characters in the keyword - their order matters
	# it determines how we will map plaintext characters to the ciphertext
	lowercase					  =   []
	for char in keyword:
		if char in alphabet_set and char not in unique_chars:
			unique_chars.append(__SCREAMING_SNAKE_CASE							)
    # the number of those unique characters will determine the number of rows
	lowercase					  =   len(__SCREAMING_SNAKE_CASE							)

	# create a shifted version of the alphabet
	lowercase					  =   unique_chars + [
	    char for char in alphabet if char not in unique_chars
	]

	# create a modified alphabet by splitting the shifted alphabet into rows
	lowercase					  =   [
	    shifted_alphabet[k : k + num_unique_chars_in_keyword]
	    for k in range(0			,							26			,							__SCREAMING_SNAKE_CASE							)
	]

	# map the alphabet characters to the modified alphabet characters
	# going 'vertically' through the modified alphabet - consider columns first
	lowercase					  =   {}
	lowercase					  =   0
	for column in range(__SCREAMING_SNAKE_CASE							):
		for row in modified_alphabet:
			# if current row (the last one) is too short, break out of loop
			if len(__SCREAMING_SNAKE_CASE							) <= column:
				break

			# map current letter to letter in modified alphabet
			lowercase					  =   row[column]
			letter_index += 1

	if verbose:
		print(__SCREAMING_SNAKE_CASE							)
	# create the encrypted text by mapping the plaintext to the modified alphabet
	return "".join(mapping[char] if char in mapping else char for char in plaintext							)


if __name__ == "__main__":
	# example use
	print(mixed_keyword('''college''', '''UNIVERSITY'''))

