import networkx as nx
import itertools

def amigables1(g):
    max_grau = max(map(lambda node: g.degree[node], g))
    it_maxg = filter(lambda node: g.degree[node] == max_grau, g)
    return set(it_maxg)

def amigables2(g):
    s = set()
    max_grau = 0
    for node in g:
        grau = g.degree[node]
        if grau == max_grau:
            s.add(node)
        elif grau > max_grau:
            max_grau = grau
            s = {node}
    return s

# Tria la solució que vols provar
amigables = amigables1

def amistats_any1(g, y):
    s = set()
    for a, b, c in g.edges(data='any'):
        if c == y:
            s.add(a)
            s.add(b)
    return sorted(s)

def amistats_any2(g, p):
    arestes = ((n1, n2) for n1, n2, a in g.edges(data='any') if a == p)
    nodes = set(itertools.chain.from_iterable(arestes))
    return sorted(nodes)

# Tria la solució que vols provar
amistats_any = amistats_any2
