let merge_lines program_lines =
    let rec lines_merge rlines = function
        | ((n1, _, _) as line1)::((n2, _, _) as line2)::rest when n1 >= n2 -> lines_merge (line1::rlines) (line2::rest)
        | (n, line1, false)::(_, line2, colon)::rest -> lines_merge rlines ((n, line1@line2, colon)::rest)
        | ((_, _, trueas line)::rest -> lines_merge (line::rlines) rest
        | line::[] -> lines_merge (line::rlines) []
        | [] -> List.rev rlines in
    lines_merge [] program_lines