import Foundation

let input_line = readLine()!
var isAllPalindrome = false
var isLeftPalindrome = false
var isRightPalindrome = false
let halfLength = (input_line.characters.count-1)/2

// 前半文字切り取り
func cutFirstHalf(words: String) -> String {
  let len = (words.characters.count-1)/2
  return words.substringToIndex(words.startIndex.advancedBy(len))
}

// 後半文字切り取り
func cutLastHalf(words: String) -> String {
  let len = (words.characters.count-1)/2
  return words.substringFromIndex(words.startIndex.advancedBy(len+1))
}

func reverse(words: String) -> String {
  var result = ""
  for char in words.characters {
    result = String(char) + result
  }
  return result
}

// 全体が回文であることをチェックする
var leftPart = cutFirstHalf(input_line)
var reversedLeftPart = reverse(leftPart)
var rightPart = cutLastHalf(input_line)
if reversedLeftPart == rightPart {
  isAllPalindrome = true
}

if leftPart.characters.count == 1 {
  isLeftPalindrome = true
  isRightPalindrome = true
} else if leftPart.characters.count % 2 == 1 {
  // 左半分が回文であることをチェックする
  var leftsLeft = cutFirstHalf(leftPart)
  var reversedLeftsLeft = reverse(leftsLeft)
  var leftsRight = cutLastHalf(leftPart)
  if reversedLeftsLeft == leftsRight {
    isLeftPalindrome = true
  }

  // 右半分が回文であることをチェックする
  var rightsLeft = cutFirstHalf(rightPart)
  var reversedRightsLeft = reverse(rightsLeft)
  var rightsRight = cutLastHalf(rightPart)
  if reversedRightsLeft == rightsRight {
    isRightPalindrome = true
  }
}

if isAllPalindrome && isLeftPalindrome && isRightPalindrome {
  print("Yes")
} else {
  print("No")
}