main = readLn >>= putStr . output . (solve 1) solve :: Int -> Int -> [[Int]] solve m 1 = [[m]] solve m 2 = [ [m, m + 1], [m + 3, m + 2] ] solve m n = top ++ mids ++ bot where centerArr = (solve (m + 4 * n - 4) (n - 2)) top = [ [ i | i <- [m .. m + n - 1] ] ] mids = [ row i n m (centerArr !! i) | i <- [0 .. n - 3] ] bot = [ reverse [ i | i <- [m + 2 * n - 2 .. m + 3 * n - 3] ] ] row :: Int -> Int -> Int -> [Int] -> [Int] row i n m centers = left ++ centers ++ right where left = [m + 4 * n - 5 - i] right = [m + n + i] output :: [[Int]] -> String output = unlines . (map (\xs -> unwords $ map show' xs)) show' :: Int -> String show' n = reverse $ take 3 $ reverse $ "00" ++ show n