-- yukicoder My practice -- author: Leonardone @ NEETSDKASU import Data.List (foldl') main = getContents >>= putStrLn . unwords . map show . solve . map read . words solve (n:xs) = baz n xs baz n xs = foldl' (bar n) xs [1 .. 2 * n - 4] bar n xs i = foldl' (\xs k -> foo k (i - k) xs) xs $ [k | k <- [0 .. i], k < i - k, k < n, i - k < n] foo p q as = bs where (xs2, (aq:xs1)) = splitAt q as (xs4, (ap:xs3)) = splitAt p xs2 bp = min ap aq bq = max ap aq bs = xs4 ++ [bp] ++ xs3 ++ [bq] ++ xs1