fn main [ var lines := list_break_to_lines(read_lazy(h[0])); var sections := list_break(lines, ""); var ranges := empty(tuple3(int, int, int)); for l in sections[0] do [ var ll := list_break(l, '-'); var a := ston(ll[0]); var b := ston(ll[1]); ranges +<= mktuple3(b - a, a, b); ] ranges := list_sort(ranges); ranges := list_reverse(ranges); var fresh := 0; for i := 0 to len(ranges) do [ var a := ranges[i].v2; var b := ranges[i].v3; for j := 0 to i do [ var aa := ranges[j].v2; var bb := ranges[j].v3; if aa <= a then a := max(a, bb + 1); if bb >= b then b := min(b, aa - 1); if b < a then goto skip_this; ] fresh += b - a + 1; skip_this: ] write(h[1], ntos(fresh) + nl); ]