






"""simple docstring"""




from __future__ import annotations

from queue import Queue




class  lowercase_     :






      def __init__(     self						)						->None:







        '''simple docstring'''


        _a					      =						{}






      def       lowerCamelCase__     (     self						)						->None:







        '''simple docstring'''


        for i in self.vertices:
          print(a_  ,  " : "  ,  " -> ".join([str(a_						) for j in self.vertices[i]]						)						)






      def       lowerCamelCase__     (     self  ,  a_  ,  a_						)						->None:







        '''simple docstring'''


        if from_vertex in self.vertices:
          self.vertices[from_vertex].append(a_						)
        else:
          _a					      =						[to_vertex]






      def       lowerCamelCase__     (     self  ,  a_						)						->set[int]:







        '''simple docstring'''


        _a					      =						set()

        # create a first in first out queue to store all the vertices for BFS
        _a					      =						Queue()

        # mark the source node as visited and enqueue it
        visited.add(a_						)
        queue.put(a_						)

        while not queue.empty():
          _a					      =						queue.get()

          # loop through all adjacent vertex and enqueue it if not yet visited
          for adjacent_vertex in self.vertices[vertex]:
            if adjacent_vertex not in visited:
              queue.put(a_						)
              visited.add(a_						)
        return visited


if __name__ == "__main__":
     from doctest import testmod

     testmod(verbose=True)

     UpperCamelCase											=     Graph()
     g.add_edge(0, 1)
     g.add_edge(0, 2)
     g.add_edge(1, 2)
     g.add_edge(2, 0)
     g.add_edge(2, 3)
     g.add_edge(3, 3)

     g.print_graph()
     # 0  :  1 -> 2
     # 1  :  2
     # 2  :  0 -> 3
     # 3  :  3

     assert sorted(g.bfs(2)) == [0, 1, 2, 3]










"""simple docstring"""




UpperCamelCase											=     [
    [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0],
    [0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0],
    [0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],
]






def 							lowerCAmelCase			(   UpperCamelCase_:				int  ,			UpperCamelCase_:				int  ,			UpperCamelCase_:				int  ,			UpperCamelCase_:				int       )							->				bool:







  '''simple docstring'''







  return 0 <= row < rows and 0 <= col < cols






def 							lowerCAmelCase			(   UpperCamelCase_:				int  ,			UpperCamelCase_:				int  ,			UpperCamelCase_:				set  ,			UpperCamelCase_:				list[list[int]]       )							->				int:







  '''simple docstring'''







  _a					      =						len(UpperCamelCase_       )
  _a					      =						len(mat[0]       )
  if is_safe(UpperCamelCase_  ,			UpperCamelCase_  ,			UpperCamelCase_  ,			UpperCamelCase_       ) and (row, col) not in seen and mat[row][col] == 1:
    seen.add((row, col)       )
    return (
        1
        + depth_first_search(row + 1  ,			UpperCamelCase_  ,			UpperCamelCase_  ,			UpperCamelCase_       )
        + depth_first_search(row - 1  ,			UpperCamelCase_  ,			UpperCamelCase_  ,			UpperCamelCase_       )
        + depth_first_search(UpperCamelCase_  ,			col + 1  ,			UpperCamelCase_  ,			UpperCamelCase_       )
        + depth_first_search(UpperCamelCase_  ,			col - 1  ,			UpperCamelCase_  ,			UpperCamelCase_       )
    )
  else:
    return 0






def 							lowerCAmelCase			(   UpperCamelCase_:				list[list[int]]       )							->				int:







  '''simple docstring'''







  _a					      =						set()

  _a					      =						0
  for row, line in enumerate(UpperCamelCase_       ):
    for col, item in enumerate(UpperCamelCase_       ):
      if item == 1 and (row, col) not in seen:
        # Maximizing the area
        _a					      =						max(UpperCamelCase_  ,			depth_first_search(UpperCamelCase_  ,			UpperCamelCase_  ,			UpperCamelCase_  ,			UpperCamelCase_       )       )
  return max_area


if __name__ == "__main__":
     import doctest

     print(find_max_area(matrix))  # Output -> 6
     doctest.testmod()


