import java.util.*;

class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
        String S = sc.next();
        int N = S.length();

        boolean first = palindrome(S);
        boolean second = palindrome(S.substring(0,(N - 1) / 2));
        boolean third = palindrome(S.substring(((N + 3) / 2) - 1, N));

        if(first == true && second == true && third == true)
            System.out.println("Yes");
        else System.out.println("No");
	}
	public static boolean palindrome(String S){
        boolean flag = true;
        for(int i=0; i<S.length(); i++) {
            if(S.charAt(i) != S.charAt(S.length()-i-1))
                flag = false;
        }
		return flag;
	}
} import java.util.*; util.* java class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
        String S = sc.next();
        int N = S.length();

        boolean first = palindrome(S);
        boolean second = palindrome(S.substring(0,(N - 1) / 2));
        boolean third = palindrome(S.substring(((N + 3) / 2) - 1, N));

        if(first == true && second == true && third == true)
            System.out.println("Yes");
        else System.out.println("No");
	}
	public static boolean palindrome(String S){
        boolean flag = true;
        for(int i=0; i<S.length(); i++) {
            if(S.charAt(i) != S.charAt(S.length()-i-1))
                flag = false;
        }
		return flag;
	}
} Main public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
        String S = sc.next();
        int N = S.length();

        boolean first = palindrome(S);
        boolean second = palindrome(S.substring(0,(N - 1) / 2));
        boolean third = palindrome(S.substring(((N + 3) / 2) - 1, N));

        if(first == true && second == true && third == true)
            System.out.println("Yes");
        else System.out.println("No");
	} main {
		Scanner sc = new Scanner(System.in);
        String S = sc.next();
        int N = S.length();

        boolean first = palindrome(S);
        boolean second = palindrome(S.substring(0,(N - 1) / 2));
        boolean third = palindrome(S.substring(((N + 3) / 2) - 1, N));

        if(first == true && second == true && third == true)
            System.out.println("Yes");
        else System.out.println("No");
	} 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 boolean first = palindrome(S); first palindrome(S) palindrome S boolean second = palindrome(S.substring(0,(N - 1) / 2)); second palindrome(S.substring(0,(N - 1) / 2)) palindrome S.substring(0,(N - 1) / 2) S.substring S 0 (N - 1) / 2 (N - 1) N 1 2 boolean third = palindrome(S.substring(((N + 3) / 2) - 1, N)); third palindrome(S.substring(((N + 3) / 2) - 1, N)) palindrome S.substring(((N + 3) / 2) - 1, N) S.substring S ((N + 3) / 2) - 1 ((N + 3) / 2) (N + 3) N 3 2 1 N if(first == true && second == true && third == true)
            System.out.println("Yes");
        else System.out.println("No"); first == true && second == true && third == true first == true && second == true && third == true first == true first true second == true second true third == true third true 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 static boolean palindrome(String S){
        boolean flag = true;
        for(int i=0; i<S.length(); i++) {
            if(S.charAt(i) != S.charAt(S.length()-i-1))
                flag = false;
        }
		return flag;
	} palindrome {
        boolean flag = true;
        for(int i=0; i<S.length(); i++) {
            if(S.charAt(i) != S.charAt(S.length()-i-1))
                flag = false;
        }
		return flag;
	} boolean flag = true; flag true for(int i=0; i<S.length(); i++) {
            if(S.charAt(i) != S.charAt(S.length()-i-1))
                flag = false;
        } int i=0; int i=0; i 0 i<S.length() i S.length() S.length S i++ i++ i {
            if(S.charAt(i) != S.charAt(S.length()-i-1))
                flag = false;
        } {
            if(S.charAt(i) != S.charAt(S.length()-i-1))
                flag = false;
        } if(S.charAt(i) != S.charAt(S.length()-i-1))
                flag = false; S.charAt(i) != S.charAt(S.length()-i-1) S.charAt(i) S.charAt S i S.charAt(S.length()-i-1) S.charAt S S.length()-i-1 S.length()-i-1 S.length() S.length S i 1 flag = false flag false return flag; flag String S S
import java.util.*;

class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
        String S = sc.next();
        int N = S.length();

        boolean first = palindrome(S);
        boolean second = palindrome(S.substring(0,(N - 1) / 2));
        boolean third = palindrome(S.substring(((N + 3) / 2) - 1, N));

        if(first == true && second == true && third == true)
            System.out.println("Yes");
        else System.out.println("No");
	}
	public static boolean palindrome(String S){
        boolean flag = true;
        for(int i=0; i<S.length(); i++) {
            if(S.charAt(i) != S.charAt(S.length()-i-1))
                flag = false;
        }
		return flag;
	}
}