import qualified Data.ByteString.Char8 as B
import Debug.Trace

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

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