



class SCREAMING_SNAKE_CASE__					:




    '''simple docstring'''






    def __init__(	self		):
        A			:	Any										=       {}






    def       _lowerCAmelCase (	self		):
        print(self.vertex		)
        for i in self.vertex:
            print(lowerCamelCase__,		""" -> """,		""" -> """.join([str(lowerCamelCase__		) for j in self.vertex[i]]		)		)






    def       _lowerCAmelCase (	self,		lowerCamelCase__,		lowerCamelCase__		):
        # check if vertex is already present,
        if from_vertex in self.vertex:
            self.vertex[from_vertex].append(lowerCamelCase__		)
        else:
            # else make a new vertex
            A			:	Any										=       [to_vertex]






    def       _lowerCAmelCase (	self		):
        # visited array for storing already visited nodes
        A			:	List[Any]										=       [False] * len(self.vertex		)

        # call the recursive helper function
        for i in range(len(self.vertex		)		):
            if not visited[i]:
                self.dfs_recursive(lowerCamelCase__,		lowerCamelCase__		)






    def       _lowerCAmelCase (	self,		lowerCamelCase__,		lowerCamelCase__		):
        # mark start vertex as visited
        A			:	str										=       True

        print(lowerCamelCase__,		end=""" """		)

        # Recur for all the vertices that are adjacent to this node
        for i in self.vertex:
            if not visited[i]:
                self.dfs_recursive(lowerCamelCase__,		lowerCamelCase__		)


if __name__ == "__main__":
     SCREAMING_SNAKE_CASE_:str					=						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()
     print("""DFS:""")
     g.dfs()

     # OUTPUT:
     # 0  ->  1 -> 2
     # 1  ->  2
     # 2  ->  0 -> 3
     # 3  ->  3
     # DFS:
     #  0 1 2 3







from __future__ import annotations




def      __UpperCamelCase     (  _lowerCAmelCase		)	->  list[int]:



    """simple docstring"""






    A			:	Tuple										=       2
    A			:	List[Any]										=       []
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
            factors.append(_lowerCAmelCase		)
    if n > 1:
        factors.append(_lowerCAmelCase		)
    return factors


if __name__ == "__main__":
     import doctest

     doctest.testmod()


