





from __future__ import annotations

from collections import deque
from collections.abc import Iterator
from dataclasses import dataclass

@dataclass
class     snake_case_		:






 '''simple docstring'''





 __UpperCamelCase       =      42
 __UpperCamelCase       =      42

class     snake_case_		:






 '''simple docstring'''





 def __init__(  self,		A_		)	->       List[Any]:
    UpperCAmelCase__						=[[] for _ in range(A_		)]
    UpperCAmelCase__						=size

 def __getitem__(  self,		A_		)	->       Iterator[Edge]:
    return iter(self._graph[vertex]		)

 @property
 def  __UpperCAmelCase						(  self		)	->       List[Any]:
    return self._size

 def  __UpperCAmelCase						(  self,		A_,		A_,		A_		)	->       Optional[int]:
    if weight not in (0, 1):
       raise ValueError("Edge weight must be either 0 or 1."		)

    if to_vertex < 0 or to_vertex >= self.size:
       raise ValueError("Vertex indexes must be in [0; size)."		)

    self._graph[from_vertex].append(Edge(A_,		A_		)		)






 def  __UpperCAmelCase						(  self,		A_,		A_		)	->       int | None:
    UpperCAmelCase__						=deque([start_vertex]		)
    UpperCAmelCase__						=[None] * self.size
    UpperCAmelCase__						=0

    while queue:
       UpperCAmelCase__						=queue.popleft()
       UpperCAmelCase__						=distances[current_vertex]
       if current_distance is None:
          continue

       for edge in self[current_vertex]:
          UpperCAmelCase__						=current_distance + edge.weight
          UpperCAmelCase__						=distances[edge.destination_vertex]
          if (
              isinstance(A_,		A_		)
              and new_distance >= dest_vertex_distance
          ):
             continue
          UpperCAmelCase__						=new_distance
          if edge.weight == 0:
             queue.appendleft(edge.destination_vertex		)
          else:
             queue.append(edge.destination_vertex		)

    if distances[finish_vertex] is None:
       raise ValueError("No path from start_vertex to finish_vertex."		)

    return distances[finish_vertex]


if __name__ == "__main__":
    import doctest

    doctest.testmod()










def 				_UpperCAmelCase			(    A     ):




   '''simple docstring'''

   for i in range(len(A     ) - 1				,							0				,							-1     ):
      UpperCAmelCase__						=False

      for j in range(A				,							0				,							-1     ):
         if unsorted[j] < unsorted[j - 1]:
            UpperCAmelCase__			,							UpperCAmelCase__						=unsorted[j - 1], unsorted[j]
            UpperCAmelCase__						=True

      for j in range(A     ):
         if unsorted[j] > unsorted[j + 1]:
            UpperCAmelCase__			,							UpperCAmelCase__						=unsorted[j + 1], unsorted[j]
            UpperCAmelCase__						=True

      if not swapped:
         break
   return unsorted


if __name__ == "__main__":
    import doctest

    doctest.testmod()
    UpperCamelCase_												=	input('Enter numbers separated by a comma:\n').strip()
    UpperCamelCase_												=	[int(item) for item in user_input.split(',')]
    print(f"""{cocktail_shaker_sort(unsorted) = }""")



