fun readInt () = valOf (TextIO.scanStream (Int.scan StringCvt.DEC) TextIO.stdIn) fun quicksort [] = [] | quicksort (h::tl) = let val (s, b) = List.foldl (fn (x, (small, big)) => if x <= h then (x::small, big) else (small, x::big)) ([], []) tl in (quicksort s) @ [h] @ (quicksort b) end fun printAns h w [] = ignore () | printAns h w l = let val taked = List.take (l, w) val dropped = List.drop (l, w) val asString = String.concatWith " " (List.map (fn a => Int.toString a) taked) in ( print (asString ^ "\n"); printAns h w dropped ) end val () = let val h = readInt () val w = readInt () val aMatrix = List.tabulate (h, fn _ => List.tabulate (w, fn _ => readInt())) val a_s = List.concat aMatrix val sorted = quicksort a_s in printAns h w sorted end