let rec insert i line lines = match lines with [] -> line.[i] <- '>'; line.[i+1] <- '<' | l :: tail -> if l.[i] = '|' && l.[i+1] = '|' then insert i l tail else begin line.[i] <- '>'; line.[i+1] <- '<' end let _ = let count = ref 0 in let lines = ref [] in let ic = stdin in try while true do let line = input_line ic in let len = String.length line in let good = len > 0 && match line.[0] with '|' | '<' | '>' -> true | _ -> false in if not good then () else let line = line in let rec iter i removed = if i = len then removed else let c = line.[i] in if c = '>' then begin begin try line.[i+1] <- '|'; line.[i] <- '|'; insert i line !lines; with e -> Printf.fprintf stderr "Error line %d\n" !count; exit 3 end; iter (i+1) removed end else if c = '<' then iter (i+1) false else iter (i+1) removed in let removed = iter 0 true in if not removed then lines := line :: !lines; incr count; done; with End_of_file -> Printf.printf "bbarker\nplinko\nverify\n"; List.iter (fun s -> Printf.printf "%s\n" s ) (List.rev !lines); print_newline () ; print_endline "foo"; print_endline "bar"