Link to this code:
https://cses.fi/paste/7167882c695ce46ff9ce6b/main :: IO ()
main = do
n <- readLn
let d = n `div` 2
case n `mod` 4 of
0 -> do
putStr "YES\n"
print d
printEven1 n
print d
printEven2 n
3 -> do
putStr "YES\n"
print d
printOdd1 n
print (d + 1)
printOdd2 n
_ -> putStr "NO\n"
printEven1, printEven2 :: Int -> IO ()
printEven1 n = do
putStr (show n)
putChar ' '
putStr (show (n - 3))
let n' = n - 4
if n' == 0
then putChar '\n'
else do
putChar ' '
printEven1 n'
printEven2 n = do
putStr (show (n - 1))
putChar ' '
putStr (show (n - 2))
let n' = n - 4
if n' == 0
then putChar '\n'
else do
putChar ' '
printEven2 n'
printOdd1, printOdd2 :: Int -> IO ()
printOdd1 3 = putStr "3\n"
printOdd1 n = do
putStr (show n)
putChar ' '
putStr (show (n - 3))
let n' = n - 4
putChar ' '
printOdd1 n'
printOdd2 3 = putStr "2 1\n"
printOdd2 n = do
putStr (show (n - 1))
putChar ' '
putStr (show (n - 2))
let n' = n - 4
putChar ' '
printOdd2 n'