import java.util.*;
import static java.lang.System.*;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//文字列を分割するためにchar配列で取得
		char[] ch = sc.next().toCharArray();
		//文字列を前半・後半部分に分割
		StringBuilder sb1 = new StringBuilder();
		StringBuilder sb2 = new StringBuilder();

		for(int i = 0; i < (ch.length-1) / 2 ; i++) {
			sb1.append(ch[i]);	
			sb2.append(ch[(ch.length + 3) / 2 - 1 + i]);
		}
		String s1 = sb1.toString();
		String sr1 = sb1.reverse().toString();
		String s2 = sb2.toString();
		String sr2 = sb2.reverse().toString();
		//out.println(s1 + " " + s2);
		//out.println(sr1 + " " + sr2);
		
		boolean flag = true;

		if (!s1.equals(s2) || !s1.equals(sr1) || !s2.equals(sr2)) {
			flag = false;
		}
		
		if (flag) out.println("Yes");
		else out.println("No");
				
	}
} import java.util.*; util.* java import static java.lang.System.*; import static java.lang.System.*; import static java.lang.System.*; public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//文字列を分割するためにchar配列で取得
		char[] ch = sc.next().toCharArray();
		//文字列を前半・後半部分に分割
		StringBuilder sb1 = new StringBuilder();
		StringBuilder sb2 = new StringBuilder();

		for(int i = 0; i < (ch.length-1) / 2 ; i++) {
			sb1.append(ch[i]);	
			sb2.append(ch[(ch.length + 3) / 2 - 1 + i]);
		}
		String s1 = sb1.toString();
		String sr1 = sb1.reverse().toString();
		String s2 = sb2.toString();
		String sr2 = sb2.reverse().toString();
		//out.println(s1 + " " + s2);
		//out.println(sr1 + " " + sr2);
		
		boolean flag = true;

		if (!s1.equals(s2) || !s1.equals(sr1) || !s2.equals(sr2)) {
			flag = false;
		}
		
		if (flag) out.println("Yes");
		else out.println("No");
				
	}
} Main public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//文字列を分割するためにchar配列で取得
		char[] ch = sc.next().toCharArray();
		//文字列を前半・後半部分に分割
		StringBuilder sb1 = new StringBuilder();
		StringBuilder sb2 = new StringBuilder();

		for(int i = 0; i < (ch.length-1) / 2 ; i++) {
			sb1.append(ch[i]);	
			sb2.append(ch[(ch.length + 3) / 2 - 1 + i]);
		}
		String s1 = sb1.toString();
		String sr1 = sb1.reverse().toString();
		String s2 = sb2.toString();
		String sr2 = sb2.reverse().toString();
		//out.println(s1 + " " + s2);
		//out.println(sr1 + " " + sr2);
		
		boolean flag = true;

		if (!s1.equals(s2) || !s1.equals(sr1) || !s2.equals(sr2)) {
			flag = false;
		}
		
		if (flag) out.println("Yes");
		else out.println("No");
				
	} main {
		Scanner sc = new Scanner(System.in);
		//文字列を分割するためにchar配列で取得
		char[] ch = sc.next().toCharArray();
		//文字列を前半・後半部分に分割
		StringBuilder sb1 = new StringBuilder();
		StringBuilder sb2 = new StringBuilder();

		for(int i = 0; i < (ch.length-1) / 2 ; i++) {
			sb1.append(ch[i]);	
			sb2.append(ch[(ch.length + 3) / 2 - 1 + i]);
		}
		String s1 = sb1.toString();
		String sr1 = sb1.reverse().toString();
		String s2 = sb2.toString();
		String sr2 = sb2.reverse().toString();
		//out.println(s1 + " " + s2);
		//out.println(sr1 + " " + sr2);
		
		boolean flag = true;

		if (!s1.equals(s2) || !s1.equals(sr1) || !s2.equals(sr2)) {
			flag = false;
		}
		
		if (flag) out.println("Yes");
		else out.println("No");
				
	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) char[] ch = sc.next().toCharArray(); ch sc.next().toCharArray() sc.next().toCharArray sc.next() sc.next sc StringBuilder sb1 = new StringBuilder(); sb1 new StringBuilder() StringBuilder sb2 = new StringBuilder(); sb2 new StringBuilder() for(int i = 0; i < (ch.length-1) / 2 ; i++) {
			sb1.append(ch[i]);	
			sb2.append(ch[(ch.length + 3) / 2 - 1 + i]);
		} int i = 0; int i = 0; i 0 i < (ch.length-1) / 2 i (ch.length-1) / 2 (ch.length-1) ch.length ch ch.length 1 2 i++ i++ i {
			sb1.append(ch[i]);	
			sb2.append(ch[(ch.length + 3) / 2 - 1 + i]);
		} {
			sb1.append(ch[i]);	
			sb2.append(ch[(ch.length + 3) / 2 - 1 + i]);
		} sb1.append(ch[i]) sb1.append sb1 ch[i] ch i sb2.append(ch[(ch.length + 3) / 2 - 1 + i]) sb2.append sb2 ch[(ch.length + 3) / 2 - 1 + i] ch (ch.length + 3) / 2 - 1 + i (ch.length + 3) / 2 - 1 (ch.length + 3) / 2 (ch.length + 3) ch.length ch ch.length 3 2 1 i String s1 = sb1.toString(); s1 sb1.toString() sb1.toString sb1 String sr1 = sb1.reverse().toString(); sr1 sb1.reverse().toString() sb1.reverse().toString sb1.reverse() sb1.reverse sb1 String s2 = sb2.toString(); s2 sb2.toString() sb2.toString sb2 String sr2 = sb2.reverse().toString(); sr2 sb2.reverse().toString() sb2.reverse().toString sb2.reverse() sb2.reverse sb2 boolean flag = true; flag true if (!s1.equals(s2) || !s1.equals(sr1) || !s2.equals(sr2)) {
			flag = false;
		} !s1.equals(s2) || !s1.equals(sr1) || !s2.equals(sr2) !s1.equals(s2) || !s1.equals(sr1) || !s2.equals(sr2) !s1.equals(s2) s1.equals(s2) s1.equals s1 s2 !s1.equals(sr1) s1.equals(sr1) s1.equals s1 sr1 !s2.equals(sr2) s2.equals(sr2) s2.equals s2 sr2 {
			flag = false;
		} flag = false flag false if (flag) out.println("Yes");
		else out.println("No"); flag out.println("Yes") out.println out "Yes" out.println("No") out.println out "No" String[] args args public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//文字列を分割するためにchar配列で取得
		char[] ch = sc.next().toCharArray();
		//文字列を前半・後半部分に分割
		StringBuilder sb1 = new StringBuilder();
		StringBuilder sb2 = new StringBuilder();

		for(int i = 0; i < (ch.length-1) / 2 ; i++) {
			sb1.append(ch[i]);	
			sb2.append(ch[(ch.length + 3) / 2 - 1 + i]);
		}
		String s1 = sb1.toString();
		String sr1 = sb1.reverse().toString();
		String s2 = sb2.toString();
		String sr2 = sb2.reverse().toString();
		//out.println(s1 + " " + s2);
		//out.println(sr1 + " " + sr2);
		
		boolean flag = true;

		if (!s1.equals(s2) || !s1.equals(sr1) || !s2.equals(sr2)) {
			flag = false;
		}
		
		if (flag) out.println("Yes");
		else out.println("No");
				
	}
} public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//文字列を分割するためにchar配列で取得
		char[] ch = sc.next().toCharArray();
		//文字列を前半・後半部分に分割
		StringBuilder sb1 = new StringBuilder();
		StringBuilder sb2 = new StringBuilder();

		for(int i = 0; i < (ch.length-1) / 2 ; i++) {
			sb1.append(ch[i]);	
			sb2.append(ch[(ch.length + 3) / 2 - 1 + i]);
		}
		String s1 = sb1.toString();
		String sr1 = sb1.reverse().toString();
		String s2 = sb2.toString();
		String sr2 = sb2.reverse().toString();
		//out.println(s1 + " " + s2);
		//out.println(sr1 + " " + sr2);
		
		boolean flag = true;

		if (!s1.equals(s2) || !s1.equals(sr1) || !s2.equals(sr2)) {
			flag = false;
		}
		
		if (flag) out.println("Yes");
		else out.println("No");
				
	}
} Main
import java.util.*;
import static java.lang.System.*;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//文字列を分割するためにchar配列で取得
		char[] ch = sc.next().toCharArray();
		//文字列を前半・後半部分に分割
		StringBuilder sb1 = new StringBuilder();
		StringBuilder sb2 = new StringBuilder();

		for(int i = 0; i < (ch.length-1) / 2 ; i++) {
			sb1.append(ch[i]);	
			sb2.append(ch[(ch.length + 3) / 2 - 1 + i]);
		}
		String s1 = sb1.toString();
		String sr1 = sb1.reverse().toString();
		String s2 = sb2.toString();
		String sr2 = sb2.reverse().toString();
		//out.println(s1 + " " + s2);
		//out.println(sr1 + " " + sr2);
		
		boolean flag = true;

		if (!s1.equals(s2) || !s1.equals(sr1) || !s2.equals(sr2)) {
			flag = false;
		}
		
		if (flag) out.println("Yes");
		else out.println("No");
				
	}
}