-- yukicoder My practice -- author: Leonardone @ NEETSDKASU main = getContents >>= putStrLn . unwords . map show . solve . map read . words solve (n:xs) = baz n xs baz n xs = foldr (bar n) xs $ reverse [1 .. 2 * n - 4] bar n i xs = foldr (\k xs -> foo k (i - k) xs) xs . reverse $ [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