code: def find_cycle(graph):
      
      
      if (isinstance(graph, graph_class)):
          directed = False
      elif (isinstance(graph, digraph_class)):
          directed = True
      else:
          raise InvalidGraphType
  
      def find_cycle_to_ancestor(node, ancestor):
          """
          Find a cycle containing both node and ancestor.
          """
          path = []
          while (node != ancestor):
              if (node is None):
                  return []
              path.append(node)
              node = spanning_tree[node]
          path.append(node)
          path.reverse()
          return path
      
      def dfs(node):
          """
          Depth-first search subfunction.
          """
          visited[node] = 1
          # Explore recursively the connected component
          for each in graph[node]:
              if (cycle):
                  return
              if (each not in visited):
                  spanning_tree[each] = node
                  dfs(each)
              else:
                  if (directed or spanning_tree[node] != each):
                      cycle.extend(find_cycle_to_ancestor(node, each))
  
      recursionlimit = getrecursionlimit()
      setrecursionlimit(max(len(graph.nodes())*2,recursionlimit))
  
      visited = {}              # List for marking visited and non-visited nodes
      spanning_tree = {}        # Spanning tree
      cycle = []
  
      # Algorithm outer-loop
      for each in graph:
          # Select a non-visited node
          if (each not in visited):
              spanning_tree[each] = None
              # Explore node's connected component
              dfs(each)
              if (cycle):
                  setrecursionlimit(recursionlimit)
                  return cycle
  
      setrecursionlimit(recursionlimit)
      return []
docs: Find a cycle in the given graph.
      
      This function will return a list of nodes which form a cycle in the graph or an empty list if
      no cycle exists.
      
      @type graph: graph, digraph
      @param graph: Graph.
      
      @rtype: list
      @return: List of nodes.