var debug = false;

//for(var i =0;i<;i++)

var dx = [-1, 1, 0, 0];
var dy = [0, 0, -1, 1];

function Main(input) {
    var isKaibun = (str) => {
        if(debug) console.log(str)
        var l = str.length;
        var len = 0;
        if (l % 2 === 0) len = l / 2;
        else len = (l - 1) / 2;
        var res = true;
        for (var i = 0; i < len; i++) {
            if (debug)
                console.log("i:" + str.charAt(i) + ", j:"+ str.charAt(l - i - 1));
            if (str.charAt(i) !== str.charAt(l - i - 1)) res = false;
        }
        return res;
    };

    var str = input.split("\n")[0];
    var len = str.length;
    var l = (len - 1) / 2;


    if (isKaibun(str) && isKaibun(str.slice(0,l)) && isKaibun(str.slice(len - l)))
        console.log("Yes")
    else
        console.log("No")
}
//*この行以降は編集しないでください（標準入出力から一度に読み込み、Mainを呼び出します）
if (!debug)
    Main(require("fs").readFileSync("/dev/stdin", "utf8"));
else
    Main(require("fs").readFileSync("./input", "utf8"));