// inputに入力データ全体が入る
function Main(input) {
  // 1行目がinput[0], 2行目がinput[1], …に入る
  input = input.split("\n");

  var S = input[0];
  var N = S.length;
  var c1 = isPalindrome( S );
  var l2 = ( N - 1 ) / 2;
  var S2 = S.substr( 0, l2 );
  var c2 = isPalindrome( S2 );
  var l3 = ( N + 3 ) / 2;
  var S3 = S.substr( l3 - 1 );
  var c3 = isPalindrome( S3 );
  if( c1 * c2 * c3 == 1 ){
    console.log( 'Yes' );
  }else{
    console.log( 'No' );
  }
}

function isPalindrome( s ){
  var l = s.length;
  var n = Math.floor( l / 2 );
  var r = 1;
  for( var i = 0; i < n && r == 1; i ++ ){
    var c1 = s.charAt( i );
    var c2 = s.charAt( l - 1 - i );
    r = ( c1 == c2 ? 1 : 0 );
  }
  
  return r;
}

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