import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner cin = new Scanner(System.in);
		
		String S = cin.next();
		
		int N = S.length();
		
		int n1 = (N-1)/2-1;
		int n2 = (N+3)/2-1;
		
		boolean flag = true;
		for(int i = 0;i<=n1;i++) {
			if(S.charAt(i)!=S.charAt(n1-i)) {
				flag = false;
				break;
			}
		}
		
		for(int j = n2;j<N;j++) {
			if(S.charAt(j)!=S.charAt(N-1-j)) {
				flag = false;
				break;
			}
		}
		
		if(flag) 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) {
		// TODO Auto-generated method stub
		
		Scanner cin = new Scanner(System.in);
		
		String S = cin.next();
		
		int N = S.length();
		
		int n1 = (N-1)/2-1;
		int n2 = (N+3)/2-1;
		
		boolean flag = true;
		for(int i = 0;i<=n1;i++) {
			if(S.charAt(i)!=S.charAt(n1-i)) {
				flag = false;
				break;
			}
		}
		
		for(int j = n2;j<N;j++) {
			if(S.charAt(j)!=S.charAt(N-1-j)) {
				flag = false;
				break;
			}
		}
		
		if(flag) System.out.println("Yes");
		else System.out.println("No");

	}

} Main public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner cin = new Scanner(System.in);
		
		String S = cin.next();
		
		int N = S.length();
		
		int n1 = (N-1)/2-1;
		int n2 = (N+3)/2-1;
		
		boolean flag = true;
		for(int i = 0;i<=n1;i++) {
			if(S.charAt(i)!=S.charAt(n1-i)) {
				flag = false;
				break;
			}
		}
		
		for(int j = n2;j<N;j++) {
			if(S.charAt(j)!=S.charAt(N-1-j)) {
				flag = false;
				break;
			}
		}
		
		if(flag) System.out.println("Yes");
		else System.out.println("No");

	} main {
		// TODO Auto-generated method stub
		
		Scanner cin = new Scanner(System.in);
		
		String S = cin.next();
		
		int N = S.length();
		
		int n1 = (N-1)/2-1;
		int n2 = (N+3)/2-1;
		
		boolean flag = true;
		for(int i = 0;i<=n1;i++) {
			if(S.charAt(i)!=S.charAt(n1-i)) {
				flag = false;
				break;
			}
		}
		
		for(int j = n2;j<N;j++) {
			if(S.charAt(j)!=S.charAt(N-1-j)) {
				flag = false;
				break;
			}
		}
		
		if(flag) System.out.println("Yes");
		else System.out.println("No");

	} Scanner cin = new Scanner(System.in); cin new Scanner(System.in) String S = cin.next(); S cin.next() cin.next cin int N = S.length(); N S.length() S.length S int n1 = (N-1)/2-1; n1 (N-1)/2-1 (N-1)/2 (N-1) N 1 2 1 int n2 = (N+3)/2-1; n2 (N+3)/2-1 (N+3)/2 (N+3) N 3 2 1 boolean flag = true; flag true for(int i = 0;i<=n1;i++) {
			if(S.charAt(i)!=S.charAt(n1-i)) {
				flag = false;
				break;
			}
		} int i = 0; int i = 0; i 0 i<=n1 i n1 i++ i++ i {
			if(S.charAt(i)!=S.charAt(n1-i)) {
				flag = false;
				break;
			}
		} {
			if(S.charAt(i)!=S.charAt(n1-i)) {
				flag = false;
				break;
			}
		} if(S.charAt(i)!=S.charAt(n1-i)) {
				flag = false;
				break;
			} S.charAt(i)!=S.charAt(n1-i) S.charAt(i) S.charAt S i S.charAt(n1-i) S.charAt S n1-i n1 i {
				flag = false;
				break;
			} flag = false flag false break; for(int j = n2;j<N;j++) {
			if(S.charAt(j)!=S.charAt(N-1-j)) {
				flag = false;
				break;
			}
		} int j = n2; int j = n2; j n2 j<N j N j++ j++ j {
			if(S.charAt(j)!=S.charAt(N-1-j)) {
				flag = false;
				break;
			}
		} {
			if(S.charAt(j)!=S.charAt(N-1-j)) {
				flag = false;
				break;
			}
		} if(S.charAt(j)!=S.charAt(N-1-j)) {
				flag = false;
				break;
			} S.charAt(j)!=S.charAt(N-1-j) S.charAt(j) S.charAt S j S.charAt(N-1-j) S.charAt S N-1-j N-1-j N 1 j {
				flag = false;
				break;
			} flag = false flag false break; if(flag) System.out.println("Yes");
		else System.out.println("No"); flag System.out.println("Yes") System.out.println System.out System System.out "Yes" 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) {
		// TODO Auto-generated method stub
		
		Scanner cin = new Scanner(System.in);
		
		String S = cin.next();
		
		int N = S.length();
		
		int n1 = (N-1)/2-1;
		int n2 = (N+3)/2-1;
		
		boolean flag = true;
		for(int i = 0;i<=n1;i++) {
			if(S.charAt(i)!=S.charAt(n1-i)) {
				flag = false;
				break;
			}
		}
		
		for(int j = n2;j<N;j++) {
			if(S.charAt(j)!=S.charAt(N-1-j)) {
				flag = false;
				break;
			}
		}
		
		if(flag) System.out.println("Yes");
		else System.out.println("No");

	}

} public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner cin = new Scanner(System.in);
		
		String S = cin.next();
		
		int N = S.length();
		
		int n1 = (N-1)/2-1;
		int n2 = (N+3)/2-1;
		
		boolean flag = true;
		for(int i = 0;i<=n1;i++) {
			if(S.charAt(i)!=S.charAt(n1-i)) {
				flag = false;
				break;
			}
		}
		
		for(int j = n2;j<N;j++) {
			if(S.charAt(j)!=S.charAt(N-1-j)) {
				flag = false;
				break;
			}
		}
		
		if(flag) System.out.println("Yes");
		else System.out.println("No");

	}

} Main
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner cin = new Scanner(System.in);
		
		String S = cin.next();
		
		int N = S.length();
		
		int n1 = (N-1)/2-1;
		int n2 = (N+3)/2-1;
		
		boolean flag = true;
		for(int i = 0;i<=n1;i++) {
			if(S.charAt(i)!=S.charAt(n1-i)) {
				flag = false;
				break;
			}
		}
		
		for(int j = n2;j<N;j++) {
			if(S.charAt(j)!=S.charAt(N-1-j)) {
				flag = false;
				break;
			}
		}
		
		if(flag) System.out.println("Yes");
		else System.out.println("No");

	}

}
