code: def bronk(r, p, x, graph):
      
      if len(p) == 0 and len(x) == 0:
          yield r
          return
      for vertex in p[:]:
          r_new = r[::]
          r_new.append(vertex)
          p_new = [val for val in p if val in graph.get_neighbors_of(vertex)] # p intersects N(vertex)
          x_new = [val for val in x if val in graph.get_neighbors_of(vertex)] # x intersects N(vertex)
          for result in bronk(r_new, p_new, x_new, graph):
              yield result
          p.remove(vertex)
          x.append(vertex)
docs: This is used to fine cliques and remove them from graph
  
      Args:
          graph (graph): this is the graph of verticies to search for
              cliques
          p (list): this is a list of the verticies to search
          r (list): used by bronk for the search
          x (list): used by bronk for the search
  
      Yields:
          list : found clique of the given graph and verticies