// inputに入力データ全体が入る
function Main(input) {
  // 1行目がinput[0], 2行目がinput[1], …に入る
  input = input.split("\n");
  const items = input[0].split("")
  const length = items.length
  const judgement = (arr) => {
    var judge = false
    const reversed = arr.slice().reverse()
    for (i = 0; i < arr.length; i++) {
      if (i === Math.floor(arr.length / 2)) {
        break
      }
      if (arr[i] === reversed[i]) {
        judge = true
      } else {
        judge = false
        break
      }
    }
    return judge
  }

  const result1 = judgement(items)
  if (length > 3) {
    const zenhan = items.slice(0, (length - 1) / 2)
    const result2 = judgement(zenhan)
    const kohan = items.slice((length + 3) / 2 - 1)
    const result3 = judgement(kohan)

    if (result1 && result2 && result3) {
      console.log('Yes')
    } else {
      console.log('No')
    }
  } else {
    if (result1) {
      console.log('Yes')
    } else {
      console.log('No')
    }
  }




  //文字列から10進数に変換するときはparseIntを使います
  // const a = parseInt(input[0], 10);
  //出力
}
//*この行以降は編集しないでください（標準入出力から一度に読み込み、Mainを呼び出します）
Main(require("fs").readFileSync("/dev/stdin", "utf8"));