import qualified Control.Monad as M main :: IO () main = do n <- readLn :: IO Int let m = (n `div` 2) + 1 M.forM_ [1..n] $ \i -> do putStrLn $ unwords . map show $ shift (i - 1) $ merge [1..m] [m+1..n] merge :: [a] -> [a] -> [a] merge xs [] = xs merge [] ys = ys merge (x:xs) (y:ys) = x : y : merge xs ys shift :: Int -> [Int] -> [Int] shift n xs = drop n xs ++ take n xs