



from __future__ import annotations


def 						UpperCAmelCase__   (   UpperCAmelCase__			:List[Any]			,       UpperCAmelCase__			:Tuple       ):






 '''simple docstring'''

 a							=		0
 a							=		len(UpperCAmelCase__       ) - 1
 while left <= right:
  a							=		(left + right) // 2
  if left == right:
   if sorted_list[middle] < item:
    a							=		middle + 1
   break
  elif sorted_list[middle] < item:
   a							=		middle + 1
  else:
   a							=		middle - 1
 sorted_list.insert(UpperCAmelCase__			,       UpperCAmelCase__       )
 return sorted_list


def 						UpperCAmelCase__   (   UpperCAmelCase__			:Optional[int]			,       UpperCAmelCase__			:List[str]       ):






 '''simple docstring'''

 a							=		[]
 while left and right:
  if left[0][0] < right[0][0]:
   result.append(left.pop(0       )       )
  else:
   result.append(right.pop(0       )       )
 return result + left + right


def 						UpperCAmelCase__   (   UpperCAmelCase__			:Optional[int]       ):






 '''simple docstring'''

 a							=		len(UpperCAmelCase__       )
 if length <= 1:
  return list_ad
 a							=		length // 2
 return merge(sortlist_ad(list_ad[:middle]       )			,       sortlist_ad(list_ad[middle:]       )       )


def 						UpperCAmelCase__   (   UpperCAmelCase__			:list[int]       ):






 '''simple docstring'''

 if len(UpperCAmelCase__       ) <= 1:
  return collection
 a							=		[]
 a							=		False
 for i in range(0			,       len(UpperCAmelCase__       )			,       2       ):
  if i == len(UpperCAmelCase__       ) - 1:
   a							=		True
  else:
   if collection[i] < collection[i + 1]:
    two_paired_list.append([collection[i], collection[i + 1]]       )
   else:
    two_paired_list.append([collection[i + 1], collection[i]]       )
 a							=		sortlist_ad(UpperCAmelCase__       )
 a							=		[i[0] for i in sorted_list_ad]
 result.append(sorted_list_ad[-1][1]       )
 if has_last_odd_item:
  a							=		collection[-1]
  a							=		binary_search_insertion(UpperCAmelCase__			,       UpperCAmelCase__       )
 a							=		False
 for i in range(len(UpperCAmelCase__       ) - 1       ):
  if result[i] == collection[-1] and has_last_odd_item:
   a							=		True
  a							=		sorted_list_ad[i][1]
  # If last_odd_item is inserted before the item's index,
  # you should forward index one more.
  if is_last_odd_item_inserted_before_this_index:
   a							=		result[: i + 2] + binary_search_insertion(result[i + 2 :]			,       UpperCAmelCase__       )
  else:
   a							=		result[: i + 1] + binary_search_insertion(result[i + 1 :]			,       UpperCAmelCase__       )

 return result


if __name__ == "__main__":
     A_		:  str										=  input('''Enter numbers separated by a comma:\n''').strip()
     A_		:  Any										=  [int(item) for item in user_input.split(''',''')]
     print(merge_insertion_sort(unsorted))


"""simple docstring"""







from __future__ import annotations

import random
from collections.abc import Iterable
from typing import Any, Generic, TypeVar

SCREAMING_SNAKE_CASE						=    TypeVar('T', bound=bool)



class 			_lowerCamelCase      (Generic[T]  ):







				def __init__(			self     :							Any      ,       lowerCamelCase_     :							T    ):

					"""simple docstring"""






					_lowercase			:     T      					=				value
					_lowercase			:     RandomizedHeapNode[T] | None      					=				None
					_lowercase			:     RandomizedHeapNode[T] | None      					=				None







				@property
				def 				__UpperCAmelCase       (			self     :							int    ):

					"""simple docstring"""






					return self._value







				@staticmethod
				def 				__UpperCAmelCase       (			lowerCamelCase_     :							RandomizedHeapNode[T] | None      ,       lowerCamelCase_     :							RandomizedHeapNode[T] | None    ):

					"""simple docstring"""






					if not roota:
						return roota

					if not roota:
						return roota

					if roota.value > roota.value:
						_lowercase					,   _lowercase			:     List[Any]      					=				roota, roota

					if random.choice([True, False]    ):
						_lowercase					,   _lowercase			:     Optional[int]      					=				roota.right, roota.left

					_lowercase			:     Tuple      					=				RandomizedHeapNode.merge(roota.left      ,       lowerCamelCase_    )

					return roota



class 			_lowerCamelCase      (Generic[T]  ):







				def __init__(			self     :							Optional[Any]      ,       lowerCamelCase_     :							Iterable[T] | None = ()    ):

					"""simple docstring"""






					_lowercase			:     RandomizedHeapNode[T] | None      					=				None

					if data:
						for item in data:
							self.insert(lowerCamelCase_    )







				def 				__UpperCAmelCase       (			self     :							Tuple      ,       lowerCamelCase_     :							T    ):

					"""simple docstring"""






					_lowercase			:     str      					=				RandomizedHeapNode.merge(self._root      ,       RandomizedHeapNode(lowerCamelCase_    )    )







				def 				__UpperCAmelCase       (			self     :							int    ):

					"""simple docstring"""






					_lowercase			:     Any      					=				self.top()

					if self._root is None:
						return None

					_lowercase			:     List[Any]      					=				RandomizedHeapNode.merge(self._root.left      ,       self._root.right    )

					return result







				def 				__UpperCAmelCase       (			self     :							List[Any]    ):

					"""simple docstring"""






					if not self._root:
						raise IndexError('Can\'t get top element for the empty heap.'    )
					return self._root.value







				def 				__UpperCAmelCase       (			self     :							Any    ):

					"""simple docstring"""






					_lowercase			:     List[Any]      					=				None







				def 				__UpperCAmelCase       (			self     :							Union[str, Any]    ):

					"""simple docstring"""






					_lowercase			:     List[Any]      					=				[]
					while self:
						result.append(self.pop()    )

					return result







				def __bool__(			self     :							List[str]    ):

					"""simple docstring"""






					return self._root is not None


if __name__ == "__main__":
						import doctest

						doctest.testmod()



