fn main [ var input := list_break_to_lines(read_lazy(h[0])); var ranges := list_break(input[0], ','); var iids := empty(list(int)); var iids_sum := 0; for r in ranges do [ var rr := list_break(r, '-'); var lo := ston(rr[0]); var hi := ston(rr[1]); var ln := len(rr[1]); var iids_visited := treeset_init(int); for l := 0 to ln do [ if l = len(iids) then iids +<= [ 0 ]; while hi > iids[l][len(iids[l]) - 1] do [ var num := len(iids[l]); var digits := len(ntos(num)); var iid := num + num * ipower(10, digits); for q := 0 to l do iid += num * ipower(10, digits * (q + 2)); iids[l] +<= iid; ] for i := 0 to len(iids[l]) do [ if iids[l][i] > hi then break; if iids[l][i] >= lo then [ var n := iids[l][i]; if not treeset_test(iids_visited, n) then [ iids_sum += n; iids_visited := treeset_set(iids_visited, n); ] ] ] ] ] write(h[1], ntos(iids_sum) + nl); ]