import java.util.Scanner;
import java.util.*;
/**
 * @author yamato
 *
 */
public class Main {

	/**
	 * @param args
	 */
	public static boolean kaibun(String S,int N) {
		int i;
		String s1;
		String s2;
		if(N%2 != 0) {
			 s1 = S.substring(0,(N-1)/2);
			 s2 = S.substring((N-1)/2+1);
		}else {
			 s1 = S.substring(0,(N)/2);
			 s2 = S.substring((N)/2);
		}
		
        StringBuffer str2 = new StringBuffer(s2);
        s2 = str2.reverse().toString();
        
        //System.out.println(s1);
        //System.out.println(s2);
        
		if(s1.equals(s2)) {
			return true;
		}else {
			return false;
		}
		
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		String S = scanner.nextLine();
		int N = S.length();
		//System.out.println(kaibun(S,N));
		if (kaibun(S,N)) {
			String S2 = S.substring(0,(N-1)/2);
			int N2 = S2.length();
			
			if (kaibun(S2,N2)) {
				String S3 = S.substring((N+3)/2-1,N);
				int N3 = S3.length();
				
				if (kaibun(S3,N3)) {
					System.out.println("Yes");
				}else {
					System.out.println("No");
				}
				
			}else {
				System.out.println("No");
			}
			
			
		}else {
			System.out.println("No");
		}
	}

} import java.util.Scanner; Scanner java.util import java.util.*; util.* java public class Main {

	/**
	 * @param args
	 */
	public static boolean kaibun(String S,int N) {
		int i;
		String s1;
		String s2;
		if(N%2 != 0) {
			 s1 = S.substring(0,(N-1)/2);
			 s2 = S.substring((N-1)/2+1);
		}else {
			 s1 = S.substring(0,(N)/2);
			 s2 = S.substring((N)/2);
		}
		
        StringBuffer str2 = new StringBuffer(s2);
        s2 = str2.reverse().toString();
        
        //System.out.println(s1);
        //System.out.println(s2);
        
		if(s1.equals(s2)) {
			return true;
		}else {
			return false;
		}
		
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		String S = scanner.nextLine();
		int N = S.length();
		//System.out.println(kaibun(S,N));
		if (kaibun(S,N)) {
			String S2 = S.substring(0,(N-1)/2);
			int N2 = S2.length();
			
			if (kaibun(S2,N2)) {
				String S3 = S.substring((N+3)/2-1,N);
				int N3 = S3.length();
				
				if (kaibun(S3,N3)) {
					System.out.println("Yes");
				}else {
					System.out.println("No");
				}
				
			}else {
				System.out.println("No");
			}
			
			
		}else {
			System.out.println("No");
		}
	}

} Main /**
	 * @param args
	 */
	public static boolean kaibun(String S,int N) {
		int i;
		String s1;
		String s2;
		if(N%2 != 0) {
			 s1 = S.substring(0,(N-1)/2);
			 s2 = S.substring((N-1)/2+1);
		}else {
			 s1 = S.substring(0,(N)/2);
			 s2 = S.substring((N)/2);
		}
		
        StringBuffer str2 = new StringBuffer(s2);
        s2 = str2.reverse().toString();
        
        //System.out.println(s1);
        //System.out.println(s2);
        
		if(s1.equals(s2)) {
			return true;
		}else {
			return false;
		}
		
	} kaibun {
		int i;
		String s1;
		String s2;
		if(N%2 != 0) {
			 s1 = S.substring(0,(N-1)/2);
			 s2 = S.substring((N-1)/2+1);
		}else {
			 s1 = S.substring(0,(N)/2);
			 s2 = S.substring((N)/2);
		}
		
        StringBuffer str2 = new StringBuffer(s2);
        s2 = str2.reverse().toString();
        
        //System.out.println(s1);
        //System.out.println(s2);
        
		if(s1.equals(s2)) {
			return true;
		}else {
			return false;
		}
		
	} int i; i String s1; s1 String s2; s2 if(N%2 != 0) {
			 s1 = S.substring(0,(N-1)/2);
			 s2 = S.substring((N-1)/2+1);
		}else {
			 s1 = S.substring(0,(N)/2);
			 s2 = S.substring((N)/2);
		} N%2 != 0 N%2 N 2 0 {
			 s1 = S.substring(0,(N-1)/2);
			 s2 = S.substring((N-1)/2+1);
		} s1 = S.substring(0,(N-1)/2) s1 S.substring(0,(N-1)/2) S.substring S 0 (N-1)/2 (N-1) N 1 2 s2 = S.substring((N-1)/2+1) s2 S.substring((N-1)/2+1) S.substring S (N-1)/2+1 (N-1)/2 (N-1) N 1 2 1 {
			 s1 = S.substring(0,(N)/2);
			 s2 = S.substring((N)/2);
		} s1 = S.substring(0,(N)/2) s1 S.substring(0,(N)/2) S.substring S 0 (N)/2 (N) 2 s2 = S.substring((N)/2) s2 S.substring((N)/2) S.substring S (N)/2 (N) 2 StringBuffer str2 = new StringBuffer(s2); str2 new StringBuffer(s2) s2 = str2.reverse().toString() s2 str2.reverse().toString() str2.reverse().toString str2.reverse() str2.reverse str2 if(s1.equals(s2)) {
			return true;
		}else {
			return false;
		} s1.equals(s2) s1.equals s1 s2 {
			return true;
		} return true; true {
			return false;
		} return false; false String S S int N N public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		String S = scanner.nextLine();
		int N = S.length();
		//System.out.println(kaibun(S,N));
		if (kaibun(S,N)) {
			String S2 = S.substring(0,(N-1)/2);
			int N2 = S2.length();
			
			if (kaibun(S2,N2)) {
				String S3 = S.substring((N+3)/2-1,N);
				int N3 = S3.length();
				
				if (kaibun(S3,N3)) {
					System.out.println("Yes");
				}else {
					System.out.println("No");
				}
				
			}else {
				System.out.println("No");
			}
			
			
		}else {
			System.out.println("No");
		}
	} main {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		String S = scanner.nextLine();
		int N = S.length();
		//System.out.println(kaibun(S,N));
		if (kaibun(S,N)) {
			String S2 = S.substring(0,(N-1)/2);
			int N2 = S2.length();
			
			if (kaibun(S2,N2)) {
				String S3 = S.substring((N+3)/2-1,N);
				int N3 = S3.length();
				
				if (kaibun(S3,N3)) {
					System.out.println("Yes");
				}else {
					System.out.println("No");
				}
				
			}else {
				System.out.println("No");
			}
			
			
		}else {
			System.out.println("No");
		}
	} Scanner scanner = new Scanner(System.in); scanner new Scanner(System.in) String S = scanner.nextLine(); S scanner.nextLine() scanner.nextLine scanner int N = S.length(); N S.length() S.length S if (kaibun(S,N)) {
			String S2 = S.substring(0,(N-1)/2);
			int N2 = S2.length();
			
			if (kaibun(S2,N2)) {
				String S3 = S.substring((N+3)/2-1,N);
				int N3 = S3.length();
				
				if (kaibun(S3,N3)) {
					System.out.println("Yes");
				}else {
					System.out.println("No");
				}
				
			}else {
				System.out.println("No");
			}
			
			
		}else {
			System.out.println("No");
		} kaibun(S,N) kaibun S N {
			String S2 = S.substring(0,(N-1)/2);
			int N2 = S2.length();
			
			if (kaibun(S2,N2)) {
				String S3 = S.substring((N+3)/2-1,N);
				int N3 = S3.length();
				
				if (kaibun(S3,N3)) {
					System.out.println("Yes");
				}else {
					System.out.println("No");
				}
				
			}else {
				System.out.println("No");
			}
			
			
		} String S2 = S.substring(0,(N-1)/2); S2 S.substring(0,(N-1)/2) S.substring S 0 (N-1)/2 (N-1) N 1 2 int N2 = S2.length(); N2 S2.length() S2.length S2 if (kaibun(S2,N2)) {
				String S3 = S.substring((N+3)/2-1,N);
				int N3 = S3.length();
				
				if (kaibun(S3,N3)) {
					System.out.println("Yes");
				}else {
					System.out.println("No");
				}
				
			}else {
				System.out.println("No");
			} kaibun(S2,N2) kaibun S2 N2 {
				String S3 = S.substring((N+3)/2-1,N);
				int N3 = S3.length();
				
				if (kaibun(S3,N3)) {
					System.out.println("Yes");
				}else {
					System.out.println("No");
				}
				
			} String S3 = S.substring((N+3)/2-1,N); S3 S.substring((N+3)/2-1,N) S.substring S (N+3)/2-1 (N+3)/2 (N+3) N 3 2 1 N int N3 = S3.length(); N3 S3.length() S3.length S3 if (kaibun(S3,N3)) {
					System.out.println("Yes");
				}else {
					System.out.println("No");
				} kaibun(S3,N3) kaibun S3 N3 {
					System.out.println("Yes");
				} System.out.println("Yes") System.out.println System.out System System.out "Yes" {
					System.out.println("No");
				} System.out.println("No") System.out.println System.out System System.out "No" {
				System.out.println("No");
			} System.out.println("No") System.out.println System.out System System.out "No" {
			System.out.println("No");
		} System.out.println("No") System.out.println System.out System System.out "No" String[] args args public class Main {

	/**
	 * @param args
	 */
	public static boolean kaibun(String S,int N) {
		int i;
		String s1;
		String s2;
		if(N%2 != 0) {
			 s1 = S.substring(0,(N-1)/2);
			 s2 = S.substring((N-1)/2+1);
		}else {
			 s1 = S.substring(0,(N)/2);
			 s2 = S.substring((N)/2);
		}
		
        StringBuffer str2 = new StringBuffer(s2);
        s2 = str2.reverse().toString();
        
        //System.out.println(s1);
        //System.out.println(s2);
        
		if(s1.equals(s2)) {
			return true;
		}else {
			return false;
		}
		
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		String S = scanner.nextLine();
		int N = S.length();
		//System.out.println(kaibun(S,N));
		if (kaibun(S,N)) {
			String S2 = S.substring(0,(N-1)/2);
			int N2 = S2.length();
			
			if (kaibun(S2,N2)) {
				String S3 = S.substring((N+3)/2-1,N);
				int N3 = S3.length();
				
				if (kaibun(S3,N3)) {
					System.out.println("Yes");
				}else {
					System.out.println("No");
				}
				
			}else {
				System.out.println("No");
			}
			
			
		}else {
			System.out.println("No");
		}
	}

} public class Main {

	/**
	 * @param args
	 */
	public static boolean kaibun(String S,int N) {
		int i;
		String s1;
		String s2;
		if(N%2 != 0) {
			 s1 = S.substring(0,(N-1)/2);
			 s2 = S.substring((N-1)/2+1);
		}else {
			 s1 = S.substring(0,(N)/2);
			 s2 = S.substring((N)/2);
		}
		
        StringBuffer str2 = new StringBuffer(s2);
        s2 = str2.reverse().toString();
        
        //System.out.println(s1);
        //System.out.println(s2);
        
		if(s1.equals(s2)) {
			return true;
		}else {
			return false;
		}
		
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		String S = scanner.nextLine();
		int N = S.length();
		//System.out.println(kaibun(S,N));
		if (kaibun(S,N)) {
			String S2 = S.substring(0,(N-1)/2);
			int N2 = S2.length();
			
			if (kaibun(S2,N2)) {
				String S3 = S.substring((N+3)/2-1,N);
				int N3 = S3.length();
				
				if (kaibun(S3,N3)) {
					System.out.println("Yes");
				}else {
					System.out.println("No");
				}
				
			}else {
				System.out.println("No");
			}
			
			
		}else {
			System.out.println("No");
		}
	}

} Main
import java.util.Scanner;
import java.util.*;
/**
 * @author yamato
 *
 */
public class Main {

	/**
	 * @param args
	 */
	public static boolean kaibun(String S,int N) {
		int i;
		String s1;
		String s2;
		if(N%2 != 0) {
			 s1 = S.substring(0,(N-1)/2);
			 s2 = S.substring((N-1)/2+1);
		}else {
			 s1 = S.substring(0,(N)/2);
			 s2 = S.substring((N)/2);
		}
		
        StringBuffer str2 = new StringBuffer(s2);
        s2 = str2.reverse().toString();
        
        //System.out.println(s1);
        //System.out.println(s2);
        
		if(s1.equals(s2)) {
			return true;
		}else {
			return false;
		}
		
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		String S = scanner.nextLine();
		int N = S.length();
		//System.out.println(kaibun(S,N));
		if (kaibun(S,N)) {
			String S2 = S.substring(0,(N-1)/2);
			int N2 = S2.length();
			
			if (kaibun(S2,N2)) {
				String S3 = S.substring((N+3)/2-1,N);
				int N3 = S3.length();
				
				if (kaibun(S3,N3)) {
					System.out.println("Yes");
				}else {
					System.out.println("No");
				}
				
			}else {
				System.out.println("No");
			}
			
			
		}else {
			System.out.println("No");
		}
	}

}
