

"""simple docstring"""






from __future__ import annotations

import sys
def       UpperCamelCase					(			_lowerCAmelCase     :						int,  _lowerCAmelCase     :						int )				->			tuple[int, int]:
	# base cases
	if abs(_lowerCAmelCase ) == 1:
		return a, 0
	elif abs(_lowerCAmelCase ) == 1:
		return 0, b

	_UpperCAmelCase						,   _UpperCAmelCase    :							str									=					a, b
	_UpperCAmelCase						,   _UpperCAmelCase    :							str									=					1, 0
	_UpperCAmelCase						,   _UpperCAmelCase    :							Tuple									=					0, 1

	while remainder != 0:
		_UpperCAmelCase    :							List[Any]									=					old_remainder // remainder
		_UpperCAmelCase						,   _UpperCAmelCase    :							Optional[int]									=					remainder, old_remainder - quotient * remainder
		_UpperCAmelCase						,   _UpperCAmelCase    :							Any									=					coeff_a, old_coeff_a - quotient * coeff_a
		_UpperCAmelCase						,   _UpperCAmelCase    :							Any									=					coeff_b, old_coeff_b - quotient * coeff_b

	# sign correction for negative numbers
	if a < 0:
		_UpperCAmelCase    :							Optional[int]									=					-old_coeff_a
	if b < 0:
		_UpperCAmelCase    :							Tuple									=					-old_coeff_b

	return old_coeff_a, old_coeff_b
def       UpperCamelCase					(			)				->			List[Any]:
	if len(sys.argv ) < 3:
		print("""2 integer arguments required""" )
		return 1
	_UpperCAmelCase    :							Tuple									=					int(sys.argv[1] )
	_UpperCAmelCase    :							List[str]									=					int(sys.argv[2] )
	print(extended_euclidean_algorithm(_lowerCAmelCase,  _lowerCAmelCase ) )
	return 0


if __name__ == "__main__":
						raise SystemExit(main())








"""simple docstring"""






from __future__ import annotations
def       UpperCamelCase					(			_lowerCAmelCase     :						list,  _lowerCAmelCase     :						list )				->			list:
	_UpperCAmelCase    :							List[Any]									=					[None] * (len(_lowerCAmelCase ) + len(_lowerCAmelCase ))

	_UpperCAmelCase    :							Union[str, Any]									=					0  # pointer to current index for left Half
	_UpperCAmelCase    :							str									=					0  # pointer to current index for the right Half
	_UpperCAmelCase    :							Optional[int]									=					0  # pointer to current index for the sorted array Half

	while pointera < len(_lowerCAmelCase ) and pointera < len(_lowerCAmelCase ):
		if left_half[pointera] < right_half[pointera]:
			_UpperCAmelCase    :							Tuple									=					left_half[pointera]
			pointera += 1
			index += 1
		else:
			_UpperCAmelCase    :							int									=					right_half[pointera]
			pointera += 1
			index += 1
	while pointera < len(_lowerCAmelCase ):
		_UpperCAmelCase    :							Tuple									=					left_half[pointera]
		pointera += 1
		index += 1

	while pointera < len(_lowerCAmelCase ):
		_UpperCAmelCase    :							Union[str, Any]									=					right_half[pointera]
		pointera += 1
		index += 1

	return sorted_array
def       UpperCamelCase					(			_lowerCAmelCase     :						list )				->			list:
	if len(_lowerCAmelCase ) <= 1:
		return array
	# the actual formula to calculate the middle element = left + (right - left) // 2
	# this avoids integer overflow in case of large N
	_UpperCAmelCase    :							Any									=					0 + (len(_lowerCAmelCase ) - 0) // 2

	# Split the array into halves till the array length becomes equal to One
	# merge the arrays of single length returned by mergeSort function and
	# pass them into the merge arrays function which merges the array
	_UpperCAmelCase    :							Optional[Any]									=					array[:middle]
	_UpperCAmelCase    :							Optional[int]									=					array[middle:]

	return merge(merge_sort(_lowerCAmelCase ),  merge_sort(_lowerCAmelCase ) )


if __name__ == "__main__":
						import doctest

						doctest.testmod()





