fn n_paths~cache(conn : array(int, [ ipower(36, 3) ]), start end : int) : int [ if start = end then return 1; var t := conn[start]; var sum := 0; while t <> 0 do [ var f := bsr t; t btr= f; sum += n_paths(conn, f, end); ] return sum; ] fn main [ var lines := list_break_to_lines(read_lazy(h[0])); var conn := array_fill(0, [ ipower(36, 3) ]); for l in lines do [ var f := ston_base(l[ .. 3], 36); var tl := list_break_whitespace(l); var t := 0; for i := 1 to len(tl) do [ t bts= ston_base(tl[i], 36); ] conn[f] := t; ] var start := ston_base("you", 36); var end := ston_base("out", 36); var result := n_paths(conn, start, end); write(h[1], ntos(result) + nl); ]