import networkx as nx

def estats_segons_canvi(g, c):
    cjt_out = set()
    cjt_in = set()
    for u, v, canvi in g.edges(data='canvi'):
        if canvi == c:
            cjt_out.add(u)
            cjt_in.add(v)
    return sorted(cjt_out), sorted(cjt_in)

def camins_de_retorn1(g, e):
    lcicles = []
    for e2 in g.succ[e]:
        for cami in nx.all_simple_paths(g, e2, e):
            lcicles.append([e] + cami)
    return lcicles

def camins_de_retorn2(g, e):
    lcicles = []
    for cami in nx.simple_cycles(g):
        if e in cami:
            i = cami.index(e)
            cicle = cami[i:] + cami[:i] + [e]
            lcicles.append(cicle)
    return lcicles

# tria la solució que vols provar
camins_de_retorn = camins_de_retorn2
