{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Map.Strict as M

type Count = Int
type Counter a = M.Map a Count

addElement :: Ord a => a -> Counter a -> Counter a
addElement x = M.insertWith (+) x 1

countElements :: Ord a => [a] -> Counter a
countElements = foldr addElement M.empty

canBackHome :: String -> Bool
canBackHome ds
    | n * s == 0 && n /= s = False
    | w * e == 0 && w /= e = False
    | otherwise = True
    where
        ctr = countElements ds
        n = M.findWithDefault 0 'N' ctr
        s = M.findWithDefault 0 'S' ctr
        w = M.findWithDefault 0 'W' ctr
        e = M.findWithDefault 0 'E' ctr

main :: IO ()
main = putStrLn . (\x -> if x then "Yes" else "No") . canBackHome =<< getLine
