import Control.Applicative ((<$>)) import Control.Monad (replicateM, guard) import Data.List (delete) main :: IO () main = do [h, w] <- map read <$> words <$> getLine solve h w <$> replicateM h getLine >>= putStrLn solve :: Int -> Int -> [String] -> String solve h w xs | null ls = "NO" | any (f ls) [(di,dj)| dj <- [0..h-1], di <- [1-w..w-1]] = "YES" | otherwise = "NO" where ls = do j <- [0..h-1] i <- [0..w-1] guard $ xs !! j !! i == '#' return (i, j) f [] (di, dj) = True f ((i, j):rs) (di, dj) | (i+di, j+dj) `elem` rs = f (delete (i+di, j+dj) rs) (di, dj) | otherwise = False