from typing import TextIO

import networkx  # type: ignore


def read_graph(data: TextIO) -> networkx.DiGraph:
    graph = networkx.DiGraph()

    for line in data:
        a, b = line.strip().split(')')
        graph.add_edge(a, b)

    return graph


def part1(data: TextIO) -> int:
    graph = read_graph(data)

    paths = networkx.single_source_shortest_path_length(graph, 'COM')

    return sum(paths.values())


def part2(data: TextIO) -> int:
    graph = read_graph(data).to_undirected()

    return networkx.shortest_path_length(graph, 'YOU', 'SAN') - 2
