import java.util.*;
public class Main {
	public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
		String S = sc.next();
		String ans="Yes";
		//回分判定1
		for(int i=1;i<=(S.length());i++){
			if(S.charAt(i-1)==S.charAt(S.length()-i)){
			}
			else{
			ans="No";
			}
		}
		//回分判定2
		for(int i=1;i<=(S.length()-1)/2;i++){
			if(S.charAt(i-1)==S.charAt(((S.length()-1)/2)-i)){
			}
			else{
			ans="No";
			}
		}
		//回分判定3
		for(int i=(S.length()+3)/2;i<=(S.length());i++){
			if(S.charAt(i-1)==S.charAt(((S.length()+3)/2)+(S.length())-i-1)){
			}
			else{
			ans="No";
			}
		}
		System.out.println(ans);
        }
    } import java.util.*; util.* java public class Main {
	public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
		String S = sc.next();
		String ans="Yes";
		//回分判定1
		for(int i=1;i<=(S.length());i++){
			if(S.charAt(i-1)==S.charAt(S.length()-i)){
			}
			else{
			ans="No";
			}
		}
		//回分判定2
		for(int i=1;i<=(S.length()-1)/2;i++){
			if(S.charAt(i-1)==S.charAt(((S.length()-1)/2)-i)){
			}
			else{
			ans="No";
			}
		}
		//回分判定3
		for(int i=(S.length()+3)/2;i<=(S.length());i++){
			if(S.charAt(i-1)==S.charAt(((S.length()+3)/2)+(S.length())-i-1)){
			}
			else{
			ans="No";
			}
		}
		System.out.println(ans);
        }
    } Main public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
		String S = sc.next();
		String ans="Yes";
		//回分判定1
		for(int i=1;i<=(S.length());i++){
			if(S.charAt(i-1)==S.charAt(S.length()-i)){
			}
			else{
			ans="No";
			}
		}
		//回分判定2
		for(int i=1;i<=(S.length()-1)/2;i++){
			if(S.charAt(i-1)==S.charAt(((S.length()-1)/2)-i)){
			}
			else{
			ans="No";
			}
		}
		//回分判定3
		for(int i=(S.length()+3)/2;i<=(S.length());i++){
			if(S.charAt(i-1)==S.charAt(((S.length()+3)/2)+(S.length())-i-1)){
			}
			else{
			ans="No";
			}
		}
		System.out.println(ans);
        } main {
        Scanner sc = new Scanner(System.in);
		String S = sc.next();
		String ans="Yes";
		//回分判定1
		for(int i=1;i<=(S.length());i++){
			if(S.charAt(i-1)==S.charAt(S.length()-i)){
			}
			else{
			ans="No";
			}
		}
		//回分判定2
		for(int i=1;i<=(S.length()-1)/2;i++){
			if(S.charAt(i-1)==S.charAt(((S.length()-1)/2)-i)){
			}
			else{
			ans="No";
			}
		}
		//回分判定3
		for(int i=(S.length()+3)/2;i<=(S.length());i++){
			if(S.charAt(i-1)==S.charAt(((S.length()+3)/2)+(S.length())-i-1)){
			}
			else{
			ans="No";
			}
		}
		System.out.println(ans);
        } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) String S = sc.next(); S sc.next() sc.next sc String ans="Yes"; ans "Yes" for(int i=1;i<=(S.length());i++){
			if(S.charAt(i-1)==S.charAt(S.length()-i)){
			}
			else{
			ans="No";
			}
		} int i=1; int i=1; i 1 i<=(S.length()) i (S.length()) S.length S i++ i++ i {
			if(S.charAt(i-1)==S.charAt(S.length()-i)){
			}
			else{
			ans="No";
			}
		} {
			if(S.charAt(i-1)==S.charAt(S.length()-i)){
			}
			else{
			ans="No";
			}
		} if(S.charAt(i-1)==S.charAt(S.length()-i)){
			}
			else{
			ans="No";
			} S.charAt(i-1)==S.charAt(S.length()-i) S.charAt(i-1) S.charAt S i-1 i 1 S.charAt(S.length()-i) S.charAt S S.length()-i S.length() S.length S i {
			} {
			ans="No";
			} ans="No" ans "No" for(int i=1;i<=(S.length()-1)/2;i++){
			if(S.charAt(i-1)==S.charAt(((S.length()-1)/2)-i)){
			}
			else{
			ans="No";
			}
		} int i=1; int i=1; i 1 i<=(S.length()-1)/2 i (S.length()-1)/2 (S.length()-1) S.length() S.length S 1 2 i++ i++ i {
			if(S.charAt(i-1)==S.charAt(((S.length()-1)/2)-i)){
			}
			else{
			ans="No";
			}
		} {
			if(S.charAt(i-1)==S.charAt(((S.length()-1)/2)-i)){
			}
			else{
			ans="No";
			}
		} if(S.charAt(i-1)==S.charAt(((S.length()-1)/2)-i)){
			}
			else{
			ans="No";
			} S.charAt(i-1)==S.charAt(((S.length()-1)/2)-i) S.charAt(i-1) S.charAt S i-1 i 1 S.charAt(((S.length()-1)/2)-i) S.charAt S ((S.length()-1)/2)-i ((S.length()-1)/2) (S.length()-1) S.length() S.length S 1 2 i {
			} {
			ans="No";
			} ans="No" ans "No" for(int i=(S.length()+3)/2;i<=(S.length());i++){
			if(S.charAt(i-1)==S.charAt(((S.length()+3)/2)+(S.length())-i-1)){
			}
			else{
			ans="No";
			}
		} int i=(S.length()+3)/2; int i=(S.length()+3)/2; i (S.length()+3)/2 (S.length()+3) S.length() S.length S 3 2 i<=(S.length()) i (S.length()) S.length S i++ i++ i {
			if(S.charAt(i-1)==S.charAt(((S.length()+3)/2)+(S.length())-i-1)){
			}
			else{
			ans="No";
			}
		} {
			if(S.charAt(i-1)==S.charAt(((S.length()+3)/2)+(S.length())-i-1)){
			}
			else{
			ans="No";
			}
		} if(S.charAt(i-1)==S.charAt(((S.length()+3)/2)+(S.length())-i-1)){
			}
			else{
			ans="No";
			} S.charAt(i-1)==S.charAt(((S.length()+3)/2)+(S.length())-i-1) S.charAt(i-1) S.charAt S i-1 i 1 S.charAt(((S.length()+3)/2)+(S.length())-i-1) S.charAt S ((S.length()+3)/2)+(S.length())-i-1 ((S.length()+3)/2)+(S.length())-i-1 ((S.length()+3)/2)+(S.length()) ((S.length()+3)/2) (S.length()+3) S.length() S.length S 3 2 (S.length()) S.length S i 1 {
			} {
			ans="No";
			} ans="No" ans "No" System.out.println(ans) System.out.println System.out System System.out ans String[] args args public class Main {
	public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
		String S = sc.next();
		String ans="Yes";
		//回分判定1
		for(int i=1;i<=(S.length());i++){
			if(S.charAt(i-1)==S.charAt(S.length()-i)){
			}
			else{
			ans="No";
			}
		}
		//回分判定2
		for(int i=1;i<=(S.length()-1)/2;i++){
			if(S.charAt(i-1)==S.charAt(((S.length()-1)/2)-i)){
			}
			else{
			ans="No";
			}
		}
		//回分判定3
		for(int i=(S.length()+3)/2;i<=(S.length());i++){
			if(S.charAt(i-1)==S.charAt(((S.length()+3)/2)+(S.length())-i-1)){
			}
			else{
			ans="No";
			}
		}
		System.out.println(ans);
        }
    } public class Main {
	public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
		String S = sc.next();
		String ans="Yes";
		//回分判定1
		for(int i=1;i<=(S.length());i++){
			if(S.charAt(i-1)==S.charAt(S.length()-i)){
			}
			else{
			ans="No";
			}
		}
		//回分判定2
		for(int i=1;i<=(S.length()-1)/2;i++){
			if(S.charAt(i-1)==S.charAt(((S.length()-1)/2)-i)){
			}
			else{
			ans="No";
			}
		}
		//回分判定3
		for(int i=(S.length()+3)/2;i<=(S.length());i++){
			if(S.charAt(i-1)==S.charAt(((S.length()+3)/2)+(S.length())-i-1)){
			}
			else{
			ans="No";
			}
		}
		System.out.println(ans);
        }
    } Main
import java.util.*;
public class Main {
	public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
		String S = sc.next();
		String ans="Yes";
		//回分判定1
		for(int i=1;i<=(S.length());i++){
			if(S.charAt(i-1)==S.charAt(S.length()-i)){
			}
			else{
			ans="No";
			}
		}
		//回分判定2
		for(int i=1;i<=(S.length()-1)/2;i++){
			if(S.charAt(i-1)==S.charAt(((S.length()-1)/2)-i)){
			}
			else{
			ans="No";
			}
		}
		//回分判定3
		for(int i=(S.length()+3)/2;i<=(S.length());i++){
			if(S.charAt(i-1)==S.charAt(((S.length()+3)/2)+(S.length())-i-1)){
			}
			else{
			ans="No";
			}
		}
		System.out.println(ans);
        }
    }