fun readInt () = valOf (TextIO.scanStream (Int.scan StringCvt.DEC) TextIO.stdIn) fun member x nil = false | member x (h::tl) = if x = h then true else member x tl fun asSet nil = nil | asSet (h::tl) = let val set' = asSet tl in if member h set' then set' else h :: set' end val () = let val n = readInt () val a_s = List.tabulate (n, fn _ => readInt ()) val set = asSet a_s val (ansCrane, ansTurtle) = if List.length set = 1 then ( if List.hd set = (n - 1) * 2 then (n, 0) else (0, n) ) else ( let val (turtleValue, craneValue) = if List.nth (set, 0) < List.nth (set, 1) then (List.nth (set, 0), List.nth (set, 1)) else (List.nth (set, 1), List.nth (set, 0)) in List.foldl (fn (a, (craneAcc, turtleAcc)) => if a = craneValue then (craneAcc + 1, turtleAcc) else (craneAcc, turtleAcc + 1)) (0, 0) a_s end ) in print (Int.toString ansCrane ^ " " ^ Int.toString ansTurtle ^ "\n") end