import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int n = s.length();
        boolean b = true;
        for (int i=0;i<n;i++){
            b&=s.charAt(i)==s.charAt(n-1-i);
        }
        for (int i=0;i<(n-1)/2;i++){
            b&=s.charAt(i)==s.charAt((n-1)/2-1-i);
        }
        for (int i=(n+3)/2-1;i<n;i++){
            b&=s.charAt(i)==s.charAt(n-1-i+(n+3)/2-1);
        }
        if (b)System.out.println("Yes");
        else System.out.println("No");
    }
    static long factorial(long num){
        if (num<2)return 1;
        else return num*factorial(num-1);
    }
    static int arraySum(int[] array){
        int ans = 0;
        for (int value : array) ans += value;
        return ans;
    }
    static long combination(long a, long b){
        long data = 1;
        for (int i=0;i<b;i++){
            data*=a-i;
        }
        return data/factorial(b);
    }
    static double log(double base,double antilogarithm){
        return Math.log(antilogarithm)/Math.log(base);
    }

    static long gcd(long x,long y){
        if (y==0)return x;
        else return gcd(y,x%y);
    }
    static long lcm(long x,long y){
        return x/gcd(x,y)*y;
    }

} 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 n = s.length();
        boolean b = true;
        for (int i=0;i<n;i++){
            b&=s.charAt(i)==s.charAt(n-1-i);
        }
        for (int i=0;i<(n-1)/2;i++){
            b&=s.charAt(i)==s.charAt((n-1)/2-1-i);
        }
        for (int i=(n+3)/2-1;i<n;i++){
            b&=s.charAt(i)==s.charAt(n-1-i+(n+3)/2-1);
        }
        if (b)System.out.println("Yes");
        else System.out.println("No");
    }
    static long factorial(long num){
        if (num<2)return 1;
        else return num*factorial(num-1);
    }
    static int arraySum(int[] array){
        int ans = 0;
        for (int value : array) ans += value;
        return ans;
    }
    static long combination(long a, long b){
        long data = 1;
        for (int i=0;i<b;i++){
            data*=a-i;
        }
        return data/factorial(b);
    }
    static double log(double base,double antilogarithm){
        return Math.log(antilogarithm)/Math.log(base);
    }

    static long gcd(long x,long y){
        if (y==0)return x;
        else return gcd(y,x%y);
    }
    static long lcm(long x,long y){
        return x/gcd(x,y)*y;
    }

} Main public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int n = s.length();
        boolean b = true;
        for (int i=0;i<n;i++){
            b&=s.charAt(i)==s.charAt(n-1-i);
        }
        for (int i=0;i<(n-1)/2;i++){
            b&=s.charAt(i)==s.charAt((n-1)/2-1-i);
        }
        for (int i=(n+3)/2-1;i<n;i++){
            b&=s.charAt(i)==s.charAt(n-1-i+(n+3)/2-1);
        }
        if (b)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 b = true;
        for (int i=0;i<n;i++){
            b&=s.charAt(i)==s.charAt(n-1-i);
        }
        for (int i=0;i<(n-1)/2;i++){
            b&=s.charAt(i)==s.charAt((n-1)/2-1-i);
        }
        for (int i=(n+3)/2-1;i<n;i++){
            b&=s.charAt(i)==s.charAt(n-1-i+(n+3)/2-1);
        }
        if (b)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 b = true; b true for (int i=0;i<n;i++){
            b&=s.charAt(i)==s.charAt(n-1-i);
        } int i=0; int i=0; i 0 i<n i n i++ i++ i {
            b&=s.charAt(i)==s.charAt(n-1-i);
        } {
            b&=s.charAt(i)==s.charAt(n-1-i);
        } b&=s.charAt(i)==s.charAt(n-1-i) b 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-i n 1 i for (int i=0;i<(n-1)/2;i++){
            b&=s.charAt(i)==s.charAt((n-1)/2-1-i);
        } int i=0; int i=0; i 0 i<(n-1)/2 i (n-1)/2 (n-1) n 1 2 i++ i++ i {
            b&=s.charAt(i)==s.charAt((n-1)/2-1-i);
        } {
            b&=s.charAt(i)==s.charAt((n-1)/2-1-i);
        } b&=s.charAt(i)==s.charAt((n-1)/2-1-i) b s.charAt(i)==s.charAt((n-1)/2-1-i) s.charAt(i) s.charAt s i s.charAt((n-1)/2-1-i) s.charAt s (n-1)/2-1-i (n-1)/2-1-i (n-1)/2 (n-1) n 1 2 1 i for (int i=(n+3)/2-1;i<n;i++){
            b&=s.charAt(i)==s.charAt(n-1-i+(n+3)/2-1);
        } int i=(n+3)/2-1; int i=(n+3)/2-1; i (n+3)/2-1 (n+3)/2 (n+3) n 3 2 1 i<n i n i++ i++ i {
            b&=s.charAt(i)==s.charAt(n-1-i+(n+3)/2-1);
        } {
            b&=s.charAt(i)==s.charAt(n-1-i+(n+3)/2-1);
        } b&=s.charAt(i)==s.charAt(n-1-i+(n+3)/2-1) b s.charAt(i)==s.charAt(n-1-i+(n+3)/2-1) s.charAt(i) s.charAt s i s.charAt(n-1-i+(n+3)/2-1) s.charAt s n-1-i+(n+3)/2-1 n-1-i+(n+3)/2 n-1-i n-1-i n 1 i (n+3)/2 (n+3) n 3 2 1 if (b)System.out.println("Yes");
        else System.out.println("No"); b 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 static long factorial(long num){
        if (num<2)return 1;
        else return num*factorial(num-1);
    } factorial {
        if (num<2)return 1;
        else return num*factorial(num-1);
    } if (num<2)return 1;
        else return num*factorial(num-1); num<2 num 2 return 1; 1 return num*factorial(num-1); num*factorial(num-1) num factorial(num-1) factorial num-1 num 1 long num num static int arraySum(int[] array){
        int ans = 0;
        for (int value : array) ans += value;
        return ans;
    } arraySum {
        int ans = 0;
        for (int value : array) ans += value;
        return ans;
    } int ans = 0; ans 0 for (int value : array) ans += value; int value array ans += value; ans += value ans value return ans; ans int[] array array static long combination(long a, long b){
        long data = 1;
        for (int i=0;i<b;i++){
            data*=a-i;
        }
        return data/factorial(b);
    } combination {
        long data = 1;
        for (int i=0;i<b;i++){
            data*=a-i;
        }
        return data/factorial(b);
    } long data = 1; data 1 for (int i=0;i<b;i++){
            data*=a-i;
        } int i=0; int i=0; i 0 i<b i b i++ i++ i {
            data*=a-i;
        } {
            data*=a-i;
        } data*=a-i data a-i a i return data/factorial(b); data/factorial(b) data factorial(b) factorial b long a a long b b static double log(double base,double antilogarithm){
        return Math.log(antilogarithm)/Math.log(base);
    } log {
        return Math.log(antilogarithm)/Math.log(base);
    } return Math.log(antilogarithm)/Math.log(base); Math.log(antilogarithm)/Math.log(base) Math.log(antilogarithm) Math.log Math antilogarithm Math.log(base) Math.log Math base double base base double antilogarithm antilogarithm static long gcd(long x,long y){
        if (y==0)return x;
        else return gcd(y,x%y);
    } gcd {
        if (y==0)return x;
        else return gcd(y,x%y);
    } if (y==0)return x;
        else return gcd(y,x%y); y==0 y 0 return x; x return gcd(y,x%y); gcd(y,x%y) gcd y x%y x y long x x long y y static long lcm(long x,long y){
        return x/gcd(x,y)*y;
    } lcm {
        return x/gcd(x,y)*y;
    } return x/gcd(x,y)*y; x/gcd(x,y)*y x/gcd(x,y) x gcd(x,y) gcd x y y long x x long y y public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int n = s.length();
        boolean b = true;
        for (int i=0;i<n;i++){
            b&=s.charAt(i)==s.charAt(n-1-i);
        }
        for (int i=0;i<(n-1)/2;i++){
            b&=s.charAt(i)==s.charAt((n-1)/2-1-i);
        }
        for (int i=(n+3)/2-1;i<n;i++){
            b&=s.charAt(i)==s.charAt(n-1-i+(n+3)/2-1);
        }
        if (b)System.out.println("Yes");
        else System.out.println("No");
    }
    static long factorial(long num){
        if (num<2)return 1;
        else return num*factorial(num-1);
    }
    static int arraySum(int[] array){
        int ans = 0;
        for (int value : array) ans += value;
        return ans;
    }
    static long combination(long a, long b){
        long data = 1;
        for (int i=0;i<b;i++){
            data*=a-i;
        }
        return data/factorial(b);
    }
    static double log(double base,double antilogarithm){
        return Math.log(antilogarithm)/Math.log(base);
    }

    static long gcd(long x,long y){
        if (y==0)return x;
        else return gcd(y,x%y);
    }
    static long lcm(long x,long y){
        return x/gcd(x,y)*y;
    }

} public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int n = s.length();
        boolean b = true;
        for (int i=0;i<n;i++){
            b&=s.charAt(i)==s.charAt(n-1-i);
        }
        for (int i=0;i<(n-1)/2;i++){
            b&=s.charAt(i)==s.charAt((n-1)/2-1-i);
        }
        for (int i=(n+3)/2-1;i<n;i++){
            b&=s.charAt(i)==s.charAt(n-1-i+(n+3)/2-1);
        }
        if (b)System.out.println("Yes");
        else System.out.println("No");
    }
    static long factorial(long num){
        if (num<2)return 1;
        else return num*factorial(num-1);
    }
    static int arraySum(int[] array){
        int ans = 0;
        for (int value : array) ans += value;
        return ans;
    }
    static long combination(long a, long b){
        long data = 1;
        for (int i=0;i<b;i++){
            data*=a-i;
        }
        return data/factorial(b);
    }
    static double log(double base,double antilogarithm){
        return Math.log(antilogarithm)/Math.log(base);
    }

    static long gcd(long x,long y){
        if (y==0)return x;
        else return gcd(y,x%y);
    }
    static long lcm(long x,long y){
        return x/gcd(x,y)*y;
    }

} Main
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int n = s.length();
        boolean b = true;
        for (int i=0;i<n;i++){
            b&=s.charAt(i)==s.charAt(n-1-i);
        }
        for (int i=0;i<(n-1)/2;i++){
            b&=s.charAt(i)==s.charAt((n-1)/2-1-i);
        }
        for (int i=(n+3)/2-1;i<n;i++){
            b&=s.charAt(i)==s.charAt(n-1-i+(n+3)/2-1);
        }
        if (b)System.out.println("Yes");
        else System.out.println("No");
    }
    static long factorial(long num){
        if (num<2)return 1;
        else return num*factorial(num-1);
    }
    static int arraySum(int[] array){
        int ans = 0;
        for (int value : array) ans += value;
        return ans;
    }
    static long combination(long a, long b){
        long data = 1;
        for (int i=0;i<b;i++){
            data*=a-i;
        }
        return data/factorial(b);
    }
    static double log(double base,double antilogarithm){
        return Math.log(antilogarithm)/Math.log(base);
    }

    static long gcd(long x,long y){
        if (y==0)return x;
        else return gcd(y,x%y);
    }
    static long lcm(long x,long y){
        return x/gcd(x,y)*y;
    }

}
