import Data.Array.IO import Control.Monad slice n [] = [] slice n xs = take n xs : slice n (drop n xs) main = do [n,k] <- map read . words <$> getLine :: IO [Int] let a = n `div` (k*k) b = n `mod` (k*k) c = head [x | x<-[0..k], x*x>=b] m = a*k+c ans <- newArray ((1,1),(m,m)) '.' :: IO (IOArray (Int,Int) Char) forM [0..a-1] $ \i -> do forM [1..k] $ \x -> do forM [1..k] $ \y -> do writeArray ans (i*k+x, i*k+y) '#' forM [0..b-1] $ \i -> do let x = a*k + i`mod`k+1 y = a*k + i`div`k+1 writeArray ans (x,y) '#' print m mapM_ putStrLn =<< slice m <$> getElems ans