// inputに入力データ全体が入る
function Main(input) {
  // 1行目がinput[0], 2行目がinput[1], …に入る
  var ans = "No";
  input = input.trim().split("\n");
  // const [X] = input[0].split(" ").map((n) => parseInt(n));
	var S = input[0];
	if (kaibun(S) && 
	kaibun(S.slice(0, Math.floor(S.length / 2))) &&
	kaibun(S.slice(Math.ceil(S.length / 2)))) {
		ans = 'Yes'
	}
	

  function kaibun(str) {
		flg = true
    for (var i = 0; i < str.length /2; i++) {
      if (str[i] != str[str.length - i - 1]) {
				flg = false
        break;
      }
		}
		return flg
  }

  //出力
  console.log(ans);
}
//*この行以降は編集しないでください（標準入出力から一度に読み込み、Mainを呼び出します）
Main(require("fs").readFileSync("/dev/stdin", "utf8"));
// Main(require("fs").readFileSync("./input.txt", "utf-8"));
