···11+import fileinput
22+import networkx as nx
33+44+55+# Read problem input.
66+G = nx.Graph()
77+88+for line in fileinput.input():
99+ a, b = line.strip().split('-')
1010+ if a not in G:
1111+ G.add_node(a)
1212+ if b not in G:
1313+ G.add_node(b)
1414+1515+ G.add_edge(a, b)
1616+1717+1818+# Solve problem.
1919+part_1 = 0
2020+largest_clique = []
2121+2222+for clique in nx.enumerate_all_cliques(G):
2323+ if len(clique) > len(largest_clique):
2424+ largest_clique = clique
2525+2626+ if len(clique) == 3 and any(n.startswith('t') for n in clique):
2727+ part_1 += 1
2828+2929+print("Part 1:", part_1)
3030+print("Part 2:", ','.join(n for n in sorted(largest_clique)))