from __future__ import annotations
def       __UpperCamelCase	(       UpperCAmelCase		,					UpperCAmelCase		,					UpperCAmelCase		,					UpperCAmelCase		,					UpperCAmelCase		,					):
 lowercase__    :   Tuple						= len(UpperCAmelCase					)

 # If row is equal to the size of the board it means there are a queen in each row in
 # the current board (possible_board)
 if row == n:
  # We convert the variable possible_board that looks like this: [1, 3, 0, 2] to
  # this: ['. Q . . ', '. . . Q ', 'Q . . . ', '. . Q . ']
  boards.append(['''. ''' * i + '''Q ''' + '''. ''' * (n - 1 - i) for i in possible_board]					)
  return

 # We iterate each column in the row to find all possible results in each row
 for col in range(UpperCAmelCase					):
  # We apply that we learned previously. First we check that in the current board
  # (possible_board) there are not other same value because if there is it means
  # that there are a collision in vertical. Then we apply the two formulas we
  # learned before:
  #
  # 45º: y - x = b or 45: row - col = b
  # 135º: y + x = b or row + col = b.
  #
  # And we verify if the results of this two formulas not exist in their variables
  # respectively.  (diagonal_right_collisions, diagonal_left_collisions)
  #
  # If any or these are True it means there is a collision so we continue to the
  # next value in the for loop.
  if (
      col in possible_board
      or row - col in diagonal_right_collisions
      or row + col in diagonal_left_collisions
  ):
   continue

  # If it is False we call dfs function again and we update the inputs
  depth_first_search(
      [*possible_board, col]		,					[*diagonal_right_collisions, row - col]		,					[*diagonal_left_collisions, row + col]		,					UpperCAmelCase		,					UpperCAmelCase		,					)
def       __UpperCamelCase	(       UpperCAmelCase					):
 lowercase__    :   list[list[str]]						= []
 depth_first_search([]		,					[]		,					[]		,					UpperCAmelCase		,					UpperCAmelCase					)

 # Print all the boards
 for board in boards:
  for column in board:
   print(UpperCAmelCase					)
  print(''''''					)

 print(len(UpperCAmelCase					)		,					'''solutions were found.'''					)


if __name__ == "__main__":
  import doctest

  doctest.testmod()
  n_queens_solution(4)


'''simple docstring'''

def       __UpperCamelCase	(       UpperCAmelCase		,					UpperCAmelCase					):
 lowercase__    :   Dict						= len(UpperCAmelCase					)
 print('''The following activities are selected:'''					)

 # The first activity is always selected
 lowercase__    :   str						= 0
 print(UpperCAmelCase		,					end=''','''					)

 # Consider rest of the activities
 for j in range(UpperCAmelCase					):
  # If this activity has start time greater than
  # or equal to the finish time of previously
  # selected activity, then select it
  if start[j] >= finish[i]:
   print(UpperCAmelCase		,					end=''','''					)
   lowercase__    :   str						= j


if __name__ == "__main__":
  import doctest

  doctest.testmod()

  __a:			str	       =       [1, 3, 0, 5, 8, 5]
  __a:			Optional[Any]	       =       [2, 4, 6, 7, 9, 9]
  print_max_activities(start, finish)

