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'