let f (a:unit) (b:int) (c:unit list) (d:unit) (e:int) : unit list =
  print_int (b+e); a::()::()::a::c

let a : int ref =  ref 0                                   

let () = let a = f (a:=3+ !a) 100 ((print_newline (print_int 22))::[]) (a:= 5 + !a) 254 in
  let b = f (print_newline (print_newline (print_int 89))) 12 a () 21 in 
    match b with
        [] -> print_newline (print_int 44); print_int 10; print_newline ()
      | x::s -> print_newline (print_int 42); print_int 11; print_newline x
