Block
    Let MAP
        (SEARCH.MAP Z.compare
            Func {key _} key)
    In
    Let G (GRAPH.G MAP)
    Let g
        (LIST.reduce
            [Right
                {0 [Right 3 & 1 & 'nil]} &
                {1 [Right 2 & 0 & 5 & 'nil]} &
                {2 [Right 3 & 'nil]} &
                {3 [Right 2 & 4 & 'nil]} &
                'nil]
            MAP.empty
            MAP.insert)
    In
    (LIST.for_each (G.strongly_connected_components g)
        Func c (STDIO.print_line (STRING.join " " (LIST.map c Z.show))))

Where

Let GRAPH Package "graph"
Let LIST Package "list"
Let SEARCH Package "search"
Let STDIO Package "stdio"
Let STRING Package "string"
Let Z Package "z"