
main :: IO()
main = do
    s <- getLine
    putStrLn $ if isStrongPalindrome s then "Yes" else "No"

isStrongPalindrome :: String -> Bool
isStrongPalindrome s = foldr (&&) True $ map isPalindrome (s : splitMid s)

isPalindrome :: String -> Bool
isPalindrome s = isSame s $ reverse s

isSame :: String -> String -> Bool
isSame [] [] = True
isSame [] [_] = False
isSame [_] [] = False
isSame (x:xs) (y:ys) = if x /= y then False else isSame xs ys

splitMid :: String -> [String]
splitMid s =
    let
        l = length s
        n = (l - 1) `div` 2
        f = take n s
        e = drop (n + 1) s
    in
    [f, e]
