import java.util.*;
public class Main{
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		String S = sc.next();
		int len = S.length() - 1;
		String buf = S.substring(0,(len / 2));
		String buf2 = S.substring(((len + 2) / 2),len + 1);
		String ans = "No";
		if(checkRet(S) && checkRet(buf) && checkRet(buf2)){
			ans = "Yes";
		}
		System.out.println(ans);
	}
	public static boolean checkRet(String s){
		int n;
		int len = s.length() - 1;
		if(len > 1){
			n = len / 2;
		}else{
			n = 1;
		}
		for(int i = 0;i < n;i++){
			if(s.charAt(i) != s.charAt(len - i)){
				return false;
			}
		}
		return true;
	}
} import java.util.*; util.* java public class Main{
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		String S = sc.next();
		int len = S.length() - 1;
		String buf = S.substring(0,(len / 2));
		String buf2 = S.substring(((len + 2) / 2),len + 1);
		String ans = "No";
		if(checkRet(S) && checkRet(buf) && checkRet(buf2)){
			ans = "Yes";
		}
		System.out.println(ans);
	}
	public static boolean checkRet(String s){
		int n;
		int len = s.length() - 1;
		if(len > 1){
			n = len / 2;
		}else{
			n = 1;
		}
		for(int i = 0;i < n;i++){
			if(s.charAt(i) != s.charAt(len - i)){
				return false;
			}
		}
		return true;
	}
} Main public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		String S = sc.next();
		int len = S.length() - 1;
		String buf = S.substring(0,(len / 2));
		String buf2 = S.substring(((len + 2) / 2),len + 1);
		String ans = "No";
		if(checkRet(S) && checkRet(buf) && checkRet(buf2)){
			ans = "Yes";
		}
		System.out.println(ans);
	} main {
		Scanner sc = new Scanner(System.in);
		String S = sc.next();
		int len = S.length() - 1;
		String buf = S.substring(0,(len / 2));
		String buf2 = S.substring(((len + 2) / 2),len + 1);
		String ans = "No";
		if(checkRet(S) && checkRet(buf) && checkRet(buf2)){
			ans = "Yes";
		}
		System.out.println(ans);
	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) String S = sc.next(); S sc.next() sc.next sc int len = S.length() - 1; len S.length() - 1 S.length() S.length S 1 String buf = S.substring(0,(len / 2)); buf S.substring(0,(len / 2)) S.substring S 0 (len / 2) len 2 String buf2 = S.substring(((len + 2) / 2),len + 1); buf2 S.substring(((len + 2) / 2),len + 1) S.substring S ((len + 2) / 2) (len + 2) len 2 2 len + 1 len 1 String ans = "No"; ans "No" if(checkRet(S) && checkRet(buf) && checkRet(buf2)){
			ans = "Yes";
		} checkRet(S) && checkRet(buf) && checkRet(buf2) checkRet(S) && checkRet(buf) && checkRet(buf2) checkRet(S) checkRet S checkRet(buf) checkRet buf checkRet(buf2) checkRet buf2 {
			ans = "Yes";
		} ans = "Yes" ans "Yes" System.out.println(ans) System.out.println System.out System System.out ans String args[] args public static boolean checkRet(String s){
		int n;
		int len = s.length() - 1;
		if(len > 1){
			n = len / 2;
		}else{
			n = 1;
		}
		for(int i = 0;i < n;i++){
			if(s.charAt(i) != s.charAt(len - i)){
				return false;
			}
		}
		return true;
	} checkRet {
		int n;
		int len = s.length() - 1;
		if(len > 1){
			n = len / 2;
		}else{
			n = 1;
		}
		for(int i = 0;i < n;i++){
			if(s.charAt(i) != s.charAt(len - i)){
				return false;
			}
		}
		return true;
	} int n; n int len = s.length() - 1; len s.length() - 1 s.length() s.length s 1 if(len > 1){
			n = len / 2;
		}else{
			n = 1;
		} len > 1 len 1 {
			n = len / 2;
		} n = len / 2 n len / 2 len 2 {
			n = 1;
		} n = 1 n 1 for(int i = 0;i < n;i++){
			if(s.charAt(i) != s.charAt(len - i)){
				return false;
			}
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			if(s.charAt(i) != s.charAt(len - i)){
				return false;
			}
		} {
			if(s.charAt(i) != s.charAt(len - i)){
				return false;
			}
		} if(s.charAt(i) != s.charAt(len - i)){
				return false;
			} s.charAt(i) != s.charAt(len - i) s.charAt(i) s.charAt s i s.charAt(len - i) s.charAt s len - i len i {
				return false;
			} return false; false return true; true String s s public class Main{
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		String S = sc.next();
		int len = S.length() - 1;
		String buf = S.substring(0,(len / 2));
		String buf2 = S.substring(((len + 2) / 2),len + 1);
		String ans = "No";
		if(checkRet(S) && checkRet(buf) && checkRet(buf2)){
			ans = "Yes";
		}
		System.out.println(ans);
	}
	public static boolean checkRet(String s){
		int n;
		int len = s.length() - 1;
		if(len > 1){
			n = len / 2;
		}else{
			n = 1;
		}
		for(int i = 0;i < n;i++){
			if(s.charAt(i) != s.charAt(len - i)){
				return false;
			}
		}
		return true;
	}
} public class Main{
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		String S = sc.next();
		int len = S.length() - 1;
		String buf = S.substring(0,(len / 2));
		String buf2 = S.substring(((len + 2) / 2),len + 1);
		String ans = "No";
		if(checkRet(S) && checkRet(buf) && checkRet(buf2)){
			ans = "Yes";
		}
		System.out.println(ans);
	}
	public static boolean checkRet(String s){
		int n;
		int len = s.length() - 1;
		if(len > 1){
			n = len / 2;
		}else{
			n = 1;
		}
		for(int i = 0;i < n;i++){
			if(s.charAt(i) != s.charAt(len - i)){
				return false;
			}
		}
		return true;
	}
} Main
import java.util.*;
public class Main{
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		String S = sc.next();
		int len = S.length() - 1;
		String buf = S.substring(0,(len / 2));
		String buf2 = S.substring(((len + 2) / 2),len + 1);
		String ans = "No";
		if(checkRet(S) && checkRet(buf) && checkRet(buf2)){
			ans = "Yes";
		}
		System.out.println(ans);
	}
	public static boolean checkRet(String s){
		int n;
		int len = s.length() - 1;
		if(len > 1){
			n = len / 2;
		}else{
			n = 1;
		}
		for(int i = 0;i < n;i++){
			if(s.charAt(i) != s.charAt(len - i)){
				return false;
			}
		}
		return true;
	}
}