Tackled problem 1625
[cses-programming-tasks.git] / app / cses1092.hs
1 main :: IO ()
2 main = do
3 line1 <- getLine
4 let n = read line1
5 let solution = solve n
6 putStrLn $ showSolution solution
7
8 solve :: Int -> Maybe ([Int] , [Int])
9 solve n
10 | n `mod` 4 == 0 = Just (mconcat [[k, n - k + 1] | k <- [1, 3 .. (n `div` 2)]],
11 mconcat [[k, n - k + 1] | k <- [2, 4 .. (n `div` 2)]])
12 | n `mod` 4 == 3 = Just (mconcat [[k, n - k] | k <- [1, 3 .. (n `div` 2)]],
13 n : (mconcat [[k, n - k] | k <- [2, 4 .. (n `div` 2)]]))
14 | otherwise = Nothing
15
16 showSolution Nothing = "NO"
17 showSolution (Just (ns, ms)) = "YES\n" ++ (showNums ns) ++ "\n" ++ (showNums ms)
18 where showNums ks = (show $ length ks) ++ "\n" ++ (unwords $ map show ks)