import qualified Data.ByteString.Char8 as B

f :: B.ByteString -> Bool
f bs
  | len == 0 = False
  | len == 1 = True
  | otherwise = B.reverse bs == bs && l == r && f l
  where
    len = B.length bs
    (l, r_) = B.splitAt (pred len `div` 2) bs
    r = B.drop 1 r_
    

main = do
  str <- B.getLine
  if f str
    then putStrLn "Yes"
    else putStrLn "No"