import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner scanner = new Scanner(System.in);
		String input = scanner.nextLine();
		Boolean isOK = (isOk(input)
				&& isOk(input.substring(0,input.length()/2))
				&& isOk(input.substring(input.length()/2+1)));
		String result = isOK ? "Yes" : "No";
		System.out.println(result);
//		System.out.println(isOk(input));
		scanner.close();
	}
	private static Boolean isOk(String s){
		char[] left = s.substring(0, s.length()/2).toCharArray();
		char[] right = s.substring(s.length()/2+1).toCharArray();
		if(s.length() % 2 == 0) right = s.substring(s.length()/2).toCharArray();
		for(int i = 0; i < left.length; i++){
			if(left[i] != right[right.length-1-i]){
				return false;
			}
		}
		return true;
	}
} import java.util.Scanner; Scanner java.util public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner scanner = new Scanner(System.in);
		String input = scanner.nextLine();
		Boolean isOK = (isOk(input)
				&& isOk(input.substring(0,input.length()/2))
				&& isOk(input.substring(input.length()/2+1)));
		String result = isOK ? "Yes" : "No";
		System.out.println(result);
//		System.out.println(isOk(input));
		scanner.close();
	}
	private static Boolean isOk(String s){
		char[] left = s.substring(0, s.length()/2).toCharArray();
		char[] right = s.substring(s.length()/2+1).toCharArray();
		if(s.length() % 2 == 0) right = s.substring(s.length()/2).toCharArray();
		for(int i = 0; i < left.length; i++){
			if(left[i] != right[right.length-1-i]){
				return false;
			}
		}
		return true;
	}
} Main public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner scanner = new Scanner(System.in);
		String input = scanner.nextLine();
		Boolean isOK = (isOk(input)
				&& isOk(input.substring(0,input.length()/2))
				&& isOk(input.substring(input.length()/2+1)));
		String result = isOK ? "Yes" : "No";
		System.out.println(result);
//		System.out.println(isOk(input));
		scanner.close();
	} main {
		// TODO 自動生成されたメソッド・スタブ
		Scanner scanner = new Scanner(System.in);
		String input = scanner.nextLine();
		Boolean isOK = (isOk(input)
				&& isOk(input.substring(0,input.length()/2))
				&& isOk(input.substring(input.length()/2+1)));
		String result = isOK ? "Yes" : "No";
		System.out.println(result);
//		System.out.println(isOk(input));
		scanner.close();
	} Scanner scanner = new Scanner(System.in); scanner new Scanner(System.in) String input = scanner.nextLine(); input scanner.nextLine() scanner.nextLine scanner Boolean isOK = (isOk(input)
				&& isOk(input.substring(0,input.length()/2))
				&& isOk(input.substring(input.length()/2+1))); isOK (isOk(input)
				&& isOk(input.substring(0,input.length()/2))
				&& isOk(input.substring(input.length()/2+1))) isOk(input)
				&& isOk(input.substring(0,input.length()/2))
				&& isOk(input.substring(input.length()/2+1)) isOk(input) isOk input isOk(input.substring(0,input.length()/2)) isOk input.substring(0,input.length()/2) input.substring input 0 input.length()/2 input.length() input.length input 2 isOk(input.substring(input.length()/2+1)) isOk input.substring(input.length()/2+1) input.substring input input.length()/2+1 input.length()/2 input.length() input.length input 2 1 String result = isOK ? "Yes" : "No"; result isOK ? "Yes" : "No" isOK "Yes" "No" System.out.println(result) System.out.println System.out System System.out result scanner.close() scanner.close scanner String[] args args private static Boolean isOk(String s){
		char[] left = s.substring(0, s.length()/2).toCharArray();
		char[] right = s.substring(s.length()/2+1).toCharArray();
		if(s.length() % 2 == 0) right = s.substring(s.length()/2).toCharArray();
		for(int i = 0; i < left.length; i++){
			if(left[i] != right[right.length-1-i]){
				return false;
			}
		}
		return true;
	} isOk {
		char[] left = s.substring(0, s.length()/2).toCharArray();
		char[] right = s.substring(s.length()/2+1).toCharArray();
		if(s.length() % 2 == 0) right = s.substring(s.length()/2).toCharArray();
		for(int i = 0; i < left.length; i++){
			if(left[i] != right[right.length-1-i]){
				return false;
			}
		}
		return true;
	} char[] left = s.substring(0, s.length()/2).toCharArray(); left s.substring(0, s.length()/2).toCharArray() s.substring(0, s.length()/2).toCharArray s.substring(0, s.length()/2) s.substring s 0 s.length()/2 s.length() s.length s 2 char[] right = s.substring(s.length()/2+1).toCharArray(); right s.substring(s.length()/2+1).toCharArray() s.substring(s.length()/2+1).toCharArray s.substring(s.length()/2+1) s.substring s s.length()/2+1 s.length()/2 s.length() s.length s 2 1 if(s.length() % 2 == 0) right = s.substring(s.length()/2).toCharArray(); s.length() % 2 == 0 s.length() % 2 s.length() s.length s 2 0 right = s.substring(s.length()/2).toCharArray() right s.substring(s.length()/2).toCharArray() s.substring(s.length()/2).toCharArray s.substring(s.length()/2) s.substring s s.length()/2 s.length() s.length s 2 for(int i = 0; i < left.length; i++){
			if(left[i] != right[right.length-1-i]){
				return false;
			}
		} int i = 0; int i = 0; i 0 i < left.length i left.length left left.length i++ i++ i {
			if(left[i] != right[right.length-1-i]){
				return false;
			}
		} {
			if(left[i] != right[right.length-1-i]){
				return false;
			}
		} if(left[i] != right[right.length-1-i]){
				return false;
			} left[i] != right[right.length-1-i] left[i] left i right[right.length-1-i] right right.length-1-i right.length-1-i right.length right right.length 1 i {
				return false;
			} return false; false return true; true String s s public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner scanner = new Scanner(System.in);
		String input = scanner.nextLine();
		Boolean isOK = (isOk(input)
				&& isOk(input.substring(0,input.length()/2))
				&& isOk(input.substring(input.length()/2+1)));
		String result = isOK ? "Yes" : "No";
		System.out.println(result);
//		System.out.println(isOk(input));
		scanner.close();
	}
	private static Boolean isOk(String s){
		char[] left = s.substring(0, s.length()/2).toCharArray();
		char[] right = s.substring(s.length()/2+1).toCharArray();
		if(s.length() % 2 == 0) right = s.substring(s.length()/2).toCharArray();
		for(int i = 0; i < left.length; i++){
			if(left[i] != right[right.length-1-i]){
				return false;
			}
		}
		return true;
	}
} public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner scanner = new Scanner(System.in);
		String input = scanner.nextLine();
		Boolean isOK = (isOk(input)
				&& isOk(input.substring(0,input.length()/2))
				&& isOk(input.substring(input.length()/2+1)));
		String result = isOK ? "Yes" : "No";
		System.out.println(result);
//		System.out.println(isOk(input));
		scanner.close();
	}
	private static Boolean isOk(String s){
		char[] left = s.substring(0, s.length()/2).toCharArray();
		char[] right = s.substring(s.length()/2+1).toCharArray();
		if(s.length() % 2 == 0) right = s.substring(s.length()/2).toCharArray();
		for(int i = 0; i < left.length; i++){
			if(left[i] != right[right.length-1-i]){
				return false;
			}
		}
		return true;
	}
} Main
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner scanner = new Scanner(System.in);
		String input = scanner.nextLine();
		Boolean isOK = (isOk(input)
				&& isOk(input.substring(0,input.length()/2))
				&& isOk(input.substring(input.length()/2+1)));
		String result = isOK ? "Yes" : "No";
		System.out.println(result);
//		System.out.println(isOk(input));
		scanner.close();
	}
	private static Boolean isOk(String s){
		char[] left = s.substring(0, s.length()/2).toCharArray();
		char[] right = s.substring(s.length()/2+1).toCharArray();
		if(s.length() % 2 == 0) right = s.substring(s.length()/2).toCharArray();
		for(int i = 0; i < left.length; i++){
			if(left[i] != right[right.length-1-i]){
				return false;
			}
		}
		return true;
	}
}
