



"""simple docstring"""





from __future__ import annotations

lowerCamelCase      =		list[list[int]]

# assigning initial values to the grid
lowerCamelCase      =		[
    [3, 0, 6, 5, 0, 8, 4, 0, 0],
    [5, 2, 0, 0, 0, 0, 0, 0, 0],
    [0, 8, 7, 0, 0, 0, 0, 3, 1],
    [0, 0, 3, 0, 1, 0, 0, 8, 0],
    [9, 0, 0, 8, 6, 3, 0, 0, 5],
    [0, 5, 0, 0, 9, 0, 6, 0, 0],
    [1, 3, 0, 0, 0, 0, 2, 5, 0],
    [0, 0, 0, 0, 0, 0, 0, 7, 4],
    [0, 0, 5, 2, 0, 6, 3, 0, 0],
]

# a grid with no solution
lowerCamelCase      =		[
    [5, 0, 6, 5, 0, 8, 4, 0, 3],
    [5, 2, 0, 0, 0, 0, 0, 0, 2],
    [1, 8, 7, 0, 0, 0, 0, 3, 1],
    [0, 0, 3, 0, 1, 0, 0, 8, 0],
    [9, 0, 0, 8, 6, 3, 0, 0, 5],
    [0, 5, 0, 0, 9, 0, 6, 0, 0],
    [1, 3, 0, 0, 0, 0, 2, 5, 0],
    [0, 0, 0, 0, 0, 0, 0, 7, 4],
    [0, 0, 5, 2, 0, 6, 3, 0, 0],
]
def      a__			(   lowerCAmelCase__			,    lowerCAmelCase__			,    lowerCAmelCase__			,    lowerCAmelCase__   ):
      for i in range(9   ):
            if grid[row][i] == n or grid[i][column] == n:
                  return False

      for i in range(3   ):
            for j in range(3   ):
                  if grid[(row - row % 3) + i][(column - column % 3) + j] == n:
                        return False

      return True
def      a__			(   lowerCAmelCase__   ):
      for i in range(9   ):
            for j in range(9   ):
                  if grid[i][j] == 0:
                        return i, j
      return None
def      a__			(   lowerCAmelCase__   ):
      if location := find_empty_location(lowerCAmelCase__   ):
            UpperCAmelCase_				,					UpperCAmelCase_    				=							location
      else:
            # If the location is ``None``, then the grid is solved.
            return grid

      for digit in range(1			,    10   ):
            if is_safe(lowerCAmelCase__			,    lowerCAmelCase__			,    lowerCAmelCase__			,    lowerCAmelCase__   ):
                  UpperCAmelCase_    				=							digit

                  if sudoku(lowerCAmelCase__   ) is not None:
                        return grid

                  UpperCAmelCase_    				=							0

      return None
def      a__			(   lowerCAmelCase__   ):
      for row in grid:
            for cell in row:
                  print(lowerCAmelCase__			,    end=" "   )
            print()


if __name__ == "__main__":
  # make a copy of grid so that you can compare with the unmodified grid
  for example_grid in (initial_grid, no_solution):
    print("""\nExample grid:\n""" + """=""" * 20)
    print_solution(example_grid)
    print("""\nExample grid solution:""")
    lowerCamelCase      =		sudoku(example_grid)
    if solution is not None:
      print_solution(solution)
    else:
      print("""Cannot find a solution.""")









"""simple docstring"""





from __future__ import annotations
def      a__			(   lowerCAmelCase__			,    lowerCAmelCase__			,    lowerCAmelCase__			,    lowerCAmelCase__   ):
      UpperCAmelCase_    				=							[]
      UpperCAmelCase_				,					UpperCAmelCase_    				=							input_list[low:mid], input_list[mid : high + 1]
      while left and right:
            result.append((left if left[0] <= right[0] else right).pop(0   )   )
      UpperCAmelCase_    				=							result + left + right
      return input_list
def      a__			(   lowerCAmelCase__   ):
      if len(lowerCAmelCase__   ) <= 1:
            return input_list
      UpperCAmelCase_    				=							list(lowerCAmelCase__   )

      # iteration for two-way merging
      UpperCAmelCase_    				=							2
      while p <= len(lowerCAmelCase__   ):
            # getting low, high and middle value for merge-sort of single list
            for i in range(0			,    len(lowerCAmelCase__   )			,    lowerCAmelCase__   ):
                  UpperCAmelCase_    				=							i
                  UpperCAmelCase_    				=							i + p - 1
                  UpperCAmelCase_    				=							(low + high + 1) // 2
                  UpperCAmelCase_    				=							merge(lowerCAmelCase__			,    lowerCAmelCase__			,    lowerCAmelCase__			,    lowerCAmelCase__   )
            # final merge of last two parts
            if p * 2 >= len(lowerCAmelCase__   ):
                  UpperCAmelCase_    				=							i
                  UpperCAmelCase_    				=							merge(lowerCAmelCase__			,    0			,    lowerCAmelCase__			,    len(lowerCAmelCase__   ) - 1   )
                  break
            p *= 2

      return input_list


if __name__ == "__main__":
  lowerCamelCase      =		input("""Enter numbers separated by a comma:\n""").strip()
  if user_input == "":
    lowerCamelCase      =		[]
  else:
    lowerCamelCase      =		[int(item.strip()) for item in user_input.split(""",""")]
  print(iter_merge_sort(unsorted))




