import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		// 読み込み
		Boolean flag1 = false;
		Boolean flag2 = false;
		Boolean flag3 = false;
		
		Scanner sc = new Scanner(System.in);
		String S = sc.next();
		int N = S.length();

		// 条件1
		StringBuffer sb = new StringBuffer(S);
		sb.reverse();
		if(S.toString().equals(sb.toString())) {
			flag1 = true;
		}
		
		// 条件2
		String parse = S.substring(0, (N -1)/2);
		sb = new StringBuffer(parse);
		sb.reverse();
		if(parse.toString().equals(sb.toString())) {
			flag2 = true;
		}
		//System.out.println(parse + " " + sb);
	
		// 条件3
		parse = S.substring((N+3)/2-1, N);
		sb = new StringBuffer(parse);
		sb.reverse();
		if(parse.toString().equals(sb.toString())) {
			flag3 = true;
		}
		//System.out.println(parse + " " + sb);
		
		if(flag1 == true && flag2 == true && flag3 == true) {
			System.out.println("Yes");
		}
		else {
			System.out.println("No");
		}
	}
} import java.util.Scanner; Scanner java.util public class Main {

	public static void main(String[] args) {

		// 読み込み
		Boolean flag1 = false;
		Boolean flag2 = false;
		Boolean flag3 = false;
		
		Scanner sc = new Scanner(System.in);
		String S = sc.next();
		int N = S.length();

		// 条件1
		StringBuffer sb = new StringBuffer(S);
		sb.reverse();
		if(S.toString().equals(sb.toString())) {
			flag1 = true;
		}
		
		// 条件2
		String parse = S.substring(0, (N -1)/2);
		sb = new StringBuffer(parse);
		sb.reverse();
		if(parse.toString().equals(sb.toString())) {
			flag2 = true;
		}
		//System.out.println(parse + " " + sb);
	
		// 条件3
		parse = S.substring((N+3)/2-1, N);
		sb = new StringBuffer(parse);
		sb.reverse();
		if(parse.toString().equals(sb.toString())) {
			flag3 = true;
		}
		//System.out.println(parse + " " + sb);
		
		if(flag1 == true && flag2 == true && flag3 == true) {
			System.out.println("Yes");
		}
		else {
			System.out.println("No");
		}
	}
} Main public static void main(String[] args) {

		// 読み込み
		Boolean flag1 = false;
		Boolean flag2 = false;
		Boolean flag3 = false;
		
		Scanner sc = new Scanner(System.in);
		String S = sc.next();
		int N = S.length();

		// 条件1
		StringBuffer sb = new StringBuffer(S);
		sb.reverse();
		if(S.toString().equals(sb.toString())) {
			flag1 = true;
		}
		
		// 条件2
		String parse = S.substring(0, (N -1)/2);
		sb = new StringBuffer(parse);
		sb.reverse();
		if(parse.toString().equals(sb.toString())) {
			flag2 = true;
		}
		//System.out.println(parse + " " + sb);
	
		// 条件3
		parse = S.substring((N+3)/2-1, N);
		sb = new StringBuffer(parse);
		sb.reverse();
		if(parse.toString().equals(sb.toString())) {
			flag3 = true;
		}
		//System.out.println(parse + " " + sb);
		
		if(flag1 == true && flag2 == true && flag3 == true) {
			System.out.println("Yes");
		}
		else {
			System.out.println("No");
		}
	} main {

		// 読み込み
		Boolean flag1 = false;
		Boolean flag2 = false;
		Boolean flag3 = false;
		
		Scanner sc = new Scanner(System.in);
		String S = sc.next();
		int N = S.length();

		// 条件1
		StringBuffer sb = new StringBuffer(S);
		sb.reverse();
		if(S.toString().equals(sb.toString())) {
			flag1 = true;
		}
		
		// 条件2
		String parse = S.substring(0, (N -1)/2);
		sb = new StringBuffer(parse);
		sb.reverse();
		if(parse.toString().equals(sb.toString())) {
			flag2 = true;
		}
		//System.out.println(parse + " " + sb);
	
		// 条件3
		parse = S.substring((N+3)/2-1, N);
		sb = new StringBuffer(parse);
		sb.reverse();
		if(parse.toString().equals(sb.toString())) {
			flag3 = true;
		}
		//System.out.println(parse + " " + sb);
		
		if(flag1 == true && flag2 == true && flag3 == true) {
			System.out.println("Yes");
		}
		else {
			System.out.println("No");
		}
	} Boolean flag1 = false; flag1 false Boolean flag2 = false; flag2 false Boolean flag3 = false; flag3 false Scanner sc = new Scanner(System.in); sc new Scanner(System.in) String S = sc.next(); S sc.next() sc.next sc int N = S.length(); N S.length() S.length S StringBuffer sb = new StringBuffer(S); sb new StringBuffer(S) sb.reverse() sb.reverse sb if(S.toString().equals(sb.toString())) {
			flag1 = true;
		} S.toString().equals(sb.toString()) S.toString().equals S.toString() S.toString S sb.toString() sb.toString sb {
			flag1 = true;
		} flag1 = true flag1 true String parse = S.substring(0, (N -1)/2); parse S.substring(0, (N -1)/2) S.substring S 0 (N -1)/2 (N -1) N 1 2 sb = new StringBuffer(parse) sb new StringBuffer(parse) sb.reverse() sb.reverse sb if(parse.toString().equals(sb.toString())) {
			flag2 = true;
		} parse.toString().equals(sb.toString()) parse.toString().equals parse.toString() parse.toString parse sb.toString() sb.toString sb {
			flag2 = true;
		} flag2 = true flag2 true parse = S.substring((N+3)/2-1, N) parse S.substring((N+3)/2-1, N) S.substring S (N+3)/2-1 (N+3)/2 (N+3) N 3 2 1 N sb = new StringBuffer(parse) sb new StringBuffer(parse) sb.reverse() sb.reverse sb if(parse.toString().equals(sb.toString())) {
			flag3 = true;
		} parse.toString().equals(sb.toString()) parse.toString().equals parse.toString() parse.toString parse sb.toString() sb.toString sb {
			flag3 = true;
		} flag3 = true flag3 true if(flag1 == true && flag2 == true && flag3 == true) {
			System.out.println("Yes");
		}
		else {
			System.out.println("No");
		} flag1 == true && flag2 == true && flag3 == true flag1 == true && flag2 == true && flag3 == true flag1 == true flag1 true flag2 == true flag2 true flag3 == true flag3 true {
			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" String[] args args public class Main {

	public static void main(String[] args) {

		// 読み込み
		Boolean flag1 = false;
		Boolean flag2 = false;
		Boolean flag3 = false;
		
		Scanner sc = new Scanner(System.in);
		String S = sc.next();
		int N = S.length();

		// 条件1
		StringBuffer sb = new StringBuffer(S);
		sb.reverse();
		if(S.toString().equals(sb.toString())) {
			flag1 = true;
		}
		
		// 条件2
		String parse = S.substring(0, (N -1)/2);
		sb = new StringBuffer(parse);
		sb.reverse();
		if(parse.toString().equals(sb.toString())) {
			flag2 = true;
		}
		//System.out.println(parse + " " + sb);
	
		// 条件3
		parse = S.substring((N+3)/2-1, N);
		sb = new StringBuffer(parse);
		sb.reverse();
		if(parse.toString().equals(sb.toString())) {
			flag3 = true;
		}
		//System.out.println(parse + " " + sb);
		
		if(flag1 == true && flag2 == true && flag3 == true) {
			System.out.println("Yes");
		}
		else {
			System.out.println("No");
		}
	}
} public class Main {

	public static void main(String[] args) {

		// 読み込み
		Boolean flag1 = false;
		Boolean flag2 = false;
		Boolean flag3 = false;
		
		Scanner sc = new Scanner(System.in);
		String S = sc.next();
		int N = S.length();

		// 条件1
		StringBuffer sb = new StringBuffer(S);
		sb.reverse();
		if(S.toString().equals(sb.toString())) {
			flag1 = true;
		}
		
		// 条件2
		String parse = S.substring(0, (N -1)/2);
		sb = new StringBuffer(parse);
		sb.reverse();
		if(parse.toString().equals(sb.toString())) {
			flag2 = true;
		}
		//System.out.println(parse + " " + sb);
	
		// 条件3
		parse = S.substring((N+3)/2-1, N);
		sb = new StringBuffer(parse);
		sb.reverse();
		if(parse.toString().equals(sb.toString())) {
			flag3 = true;
		}
		//System.out.println(parse + " " + sb);
		
		if(flag1 == true && flag2 == true && flag3 == true) {
			System.out.println("Yes");
		}
		else {
			System.out.println("No");
		}
	}
} Main
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		// 読み込み
		Boolean flag1 = false;
		Boolean flag2 = false;
		Boolean flag3 = false;
		
		Scanner sc = new Scanner(System.in);
		String S = sc.next();
		int N = S.length();

		// 条件1
		StringBuffer sb = new StringBuffer(S);
		sb.reverse();
		if(S.toString().equals(sb.toString())) {
			flag1 = true;
		}
		
		// 条件2
		String parse = S.substring(0, (N -1)/2);
		sb = new StringBuffer(parse);
		sb.reverse();
		if(parse.toString().equals(sb.toString())) {
			flag2 = true;
		}
		//System.out.println(parse + " " + sb);
	
		// 条件3
		parse = S.substring((N+3)/2-1, N);
		sb = new StringBuffer(parse);
		sb.reverse();
		if(parse.toString().equals(sb.toString())) {
			flag3 = true;
		}
		//System.out.println(parse + " " + sb);
		
		if(flag1 == true && flag2 == true && flag3 == true) {
			System.out.println("Yes");
		}
		else {
			System.out.println("No");
		}
	}
}
