file = "input.txt" def parse_input(file): connections = {} with open(file, 'r') as f: for line in f: a, b = line.strip().split('-') if a not in connections: connections[a] = set() if b not in connections: connections[b] = set() connections[a].add(b) connections[b].add(a) return connections def find_triangles(connections): triangles = set() for a in connections: for b in connections[a]: if b > a: # Ensure unique pairs for c in connections[b]: if c > b and c in connections[a]: triangles.add(tuple(sorted([a, b, c]))) return triangles def filter_triangles(triangles): return [triangle for triangle in triangles if any(comp.startswith('t') for comp in triangle)] def find_largest_clique(connections): def is_clique(potential_clique): return all(connections[a].issuperset(potential_clique - {a}) for a in potential_clique) def expand_clique(current_clique, candidates): max_clique = current_clique for candidate in candidates: new_clique = current_clique | {candidate} new_candidates = candidates & connections[candidate] if is_clique(new_clique): expanded_clique = expand_clique(new_clique, new_candidates) if len(expanded_clique) > len(max_clique): max_clique = expanded_clique return max_clique all_computers = set(connections.keys()) largest_clique = set() for computer in all_computers: clique = expand_clique({computer}, connections[computer]) if len(clique) > len(largest_clique): largest_clique = clique return largest_clique connections = parse_input(file) triangles = find_triangles(connections) filtered_triangles = filter_triangles(triangles) print(len(filtered_triangles)) largest_clique = find_largest_clique(connections) password = ','.join(sorted(largest_clique)) print(password)