import java.util.*;

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

        String S = sc.next();
        int L = S.length();

        boolean isPar = isParindorome(S);
        boolean isParLeft = isParindorome(S.substring(0, (L - 1) / 2));
        boolean isParRight = isParindorome(S.substring(((L + 3) / 2)-1, L));
        if (!isPar || !isParLeft || !isParRight) {
            System.out.println("No");
        } else {
            System.out.println("Yes");
        }
    }

    static Boolean isParindorome(String S) {
        int N = S.length();
        for (int i = 0; i < N / 2; i++) {
            if (S.charAt(i) != S.charAt((N - 1) - i)) {
                return false;
            }
        }
        return true;
    }
} import java.util.*; util.* java public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String S = sc.next();
        int L = S.length();

        boolean isPar = isParindorome(S);
        boolean isParLeft = isParindorome(S.substring(0, (L - 1) / 2));
        boolean isParRight = isParindorome(S.substring(((L + 3) / 2)-1, L));
        if (!isPar || !isParLeft || !isParRight) {
            System.out.println("No");
        } else {
            System.out.println("Yes");
        }
    }

    static Boolean isParindorome(String S) {
        int N = S.length();
        for (int i = 0; i < N / 2; i++) {
            if (S.charAt(i) != S.charAt((N - 1) - i)) {
                return false;
            }
        }
        return true;
    }
} Main public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String S = sc.next();
        int L = S.length();

        boolean isPar = isParindorome(S);
        boolean isParLeft = isParindorome(S.substring(0, (L - 1) / 2));
        boolean isParRight = isParindorome(S.substring(((L + 3) / 2)-1, L));
        if (!isPar || !isParLeft || !isParRight) {
            System.out.println("No");
        } else {
            System.out.println("Yes");
        }
    } main {
        Scanner sc = new Scanner(System.in);

        String S = sc.next();
        int L = S.length();

        boolean isPar = isParindorome(S);
        boolean isParLeft = isParindorome(S.substring(0, (L - 1) / 2));
        boolean isParRight = isParindorome(S.substring(((L + 3) / 2)-1, L));
        if (!isPar || !isParLeft || !isParRight) {
            System.out.println("No");
        } else {
            System.out.println("Yes");
        }
    } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) String S = sc.next(); S sc.next() sc.next sc int L = S.length(); L S.length() S.length S boolean isPar = isParindorome(S); isPar isParindorome(S) isParindorome S boolean isParLeft = isParindorome(S.substring(0, (L - 1) / 2)); isParLeft isParindorome(S.substring(0, (L - 1) / 2)) isParindorome S.substring(0, (L - 1) / 2) S.substring S 0 (L - 1) / 2 (L - 1) L 1 2 boolean isParRight = isParindorome(S.substring(((L + 3) / 2)-1, L)); isParRight isParindorome(S.substring(((L + 3) / 2)-1, L)) isParindorome S.substring(((L + 3) / 2)-1, L) S.substring S ((L + 3) / 2)-1 ((L + 3) / 2) (L + 3) L 3 2 1 L if (!isPar || !isParLeft || !isParRight) {
            System.out.println("No");
        } else {
            System.out.println("Yes");
        } !isPar || !isParLeft || !isParRight !isPar || !isParLeft || !isParRight !isPar isPar !isParLeft isParLeft !isParRight isParRight {
            System.out.println("No");
        } System.out.println("No") System.out.println System.out System System.out "No" {
            System.out.println("Yes");
        } System.out.println("Yes") System.out.println System.out System System.out "Yes" String[] args args static Boolean isParindorome(String S) {
        int N = S.length();
        for (int i = 0; i < N / 2; i++) {
            if (S.charAt(i) != S.charAt((N - 1) - i)) {
                return false;
            }
        }
        return true;
    } isParindorome {
        int N = S.length();
        for (int i = 0; i < N / 2; i++) {
            if (S.charAt(i) != S.charAt((N - 1) - i)) {
                return false;
            }
        }
        return true;
    } int N = S.length(); N S.length() S.length S for (int i = 0; i < N / 2; i++) {
            if (S.charAt(i) != S.charAt((N - 1) - i)) {
                return false;
            }
        } int i = 0; int i = 0; i 0 i < N / 2 i N / 2 N 2 i++ i++ i {
            if (S.charAt(i) != S.charAt((N - 1) - i)) {
                return false;
            }
        } {
            if (S.charAt(i) != S.charAt((N - 1) - i)) {
                return false;
            }
        } if (S.charAt(i) != S.charAt((N - 1) - i)) {
                return false;
            } S.charAt(i) != S.charAt((N - 1) - i) S.charAt(i) S.charAt S i S.charAt((N - 1) - i) S.charAt S (N - 1) - i (N - 1) N 1 i {
                return false;
            } return false; false return true; true String S S public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String S = sc.next();
        int L = S.length();

        boolean isPar = isParindorome(S);
        boolean isParLeft = isParindorome(S.substring(0, (L - 1) / 2));
        boolean isParRight = isParindorome(S.substring(((L + 3) / 2)-1, L));
        if (!isPar || !isParLeft || !isParRight) {
            System.out.println("No");
        } else {
            System.out.println("Yes");
        }
    }

    static Boolean isParindorome(String S) {
        int N = S.length();
        for (int i = 0; i < N / 2; i++) {
            if (S.charAt(i) != S.charAt((N - 1) - i)) {
                return false;
            }
        }
        return true;
    }
} public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String S = sc.next();
        int L = S.length();

        boolean isPar = isParindorome(S);
        boolean isParLeft = isParindorome(S.substring(0, (L - 1) / 2));
        boolean isParRight = isParindorome(S.substring(((L + 3) / 2)-1, L));
        if (!isPar || !isParLeft || !isParRight) {
            System.out.println("No");
        } else {
            System.out.println("Yes");
        }
    }

    static Boolean isParindorome(String S) {
        int N = S.length();
        for (int i = 0; i < N / 2; i++) {
            if (S.charAt(i) != S.charAt((N - 1) - i)) {
                return false;
            }
        }
        return true;
    }
} Main
import java.util.*;

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

        String S = sc.next();
        int L = S.length();

        boolean isPar = isParindorome(S);
        boolean isParLeft = isParindorome(S.substring(0, (L - 1) / 2));
        boolean isParRight = isParindorome(S.substring(((L + 3) / 2)-1, L));
        if (!isPar || !isParLeft || !isParRight) {
            System.out.println("No");
        } else {
            System.out.println("Yes");
        }
    }

    static Boolean isParindorome(String S) {
        int N = S.length();
        for (int i = 0; i < N / 2; i++) {
            if (S.charAt(i) != S.charAt((N - 1) - i)) {
                return false;
            }
        }
        return true;
    }
}
