(* http://www.spoj.pl/problems/LWAR/ *) let bool_list_of_string s = let n = String.length s in let rec aux i = if i < n then (s.[i] = '1') :: aux (i + 1) else [] in aux 0 let print_bool_list l = List.iter (fun x -> print_char (if x then '1' else '0')) l; print_newline () let rec invert = function | [] -> [] | h :: q -> (not h) :: invert q let rec f = function | true :: ((true :: _) as t) -> true :: f_invert t | true :: false :: t -> true :: true :: f t | bl -> bl and f_invert = function (* f_invert l = f (invert l) *) | false :: ((false :: _) as not_t) -> false :: f not_t | false :: true :: not_t -> false :: false :: f_invert not_t | not_bl -> invert not_bl let bombstrat s = print_bool_list (f (bool_list_of_string s)) let _ = let n = read_int () in for i = 1 to n do bombstrat (read_line ()) done