import qualified Data.ByteString.Char8 as BS

main = do
  s <- BS.getLine

  let n = BS.length s
      s1 = BS.take ((n-1) `div` 2) s
      s2 = BS.drop ((n-1) `div` 2 + 1) s

      checkPalindrome s i j | i >= j = True
                            | otherwise =
                              ((BS.index s i) == (BS.index s j))
                              && checkPalindrome s (i+1) (j-1)

  putStrLn $ if s1 == s2 && checkPalindrome s1 0 ((n-1) `div` 2 - 1)
             then "Yes"
             else "No"