fun readInt () = valOf (TextIO.scanStream (Int.scan StringCvt.DEC) TextIO.stdIn) fun realString n = if 0.0 <= n then Real.toString n else "-" ^ Real.toString (Real.abs n) fun insertionSort l = let fun insert x [] = [x] | insert x (y::ys) = if x <= y then x::y::ys else y::(insert x ys) in foldl (fn (x, acc) => insert x acc) [] l end val () = let val n = readInt () val a_s = List.tabulate (n, fn _ => readInt ()) fun findMedian l = let val sorted = insertionSort l val i = length l div 2 in if length l mod 2 = 0 then (Real.fromInt (List.nth(sorted, (i - 1)) + List.nth(sorted, i) )) / 2.0 else Real.fromInt (List.nth(sorted, i)) end val ans = findMedian a_s in print (realString ans) end