import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        PrintWriter pw = new PrintWriter(System.out);
//        sc.useDelimiter("\n");

        String s = sc.next();
        int n = s.length();
        String s2 = s.substring(0, (n-1)/2);
        String s3 = s.substring((n+3)/2-1);
        pw.println(kaibun(s) && kaibun(s2) && kaibun(s3) ? "Yes" : "No");
        
        pw.flush();
    }

    public static boolean kaibun (String str) {
        int n = str.length();
        for (int i = 0; i < n; i++)
            if (str.charAt(i) != str.charAt(n-1-i)) return false;
        return true;
    }
} import java.io.*; io.* java import java.util.*; util.* java public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        PrintWriter pw = new PrintWriter(System.out);
//        sc.useDelimiter("\n");

        String s = sc.next();
        int n = s.length();
        String s2 = s.substring(0, (n-1)/2);
        String s3 = s.substring((n+3)/2-1);
        pw.println(kaibun(s) && kaibun(s2) && kaibun(s3) ? "Yes" : "No");
        
        pw.flush();
    }

    public static boolean kaibun (String str) {
        int n = str.length();
        for (int i = 0; i < n; i++)
            if (str.charAt(i) != str.charAt(n-1-i)) return false;
        return true;
    }
} Main public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        PrintWriter pw = new PrintWriter(System.out);
//        sc.useDelimiter("\n");

        String s = sc.next();
        int n = s.length();
        String s2 = s.substring(0, (n-1)/2);
        String s3 = s.substring((n+3)/2-1);
        pw.println(kaibun(s) && kaibun(s2) && kaibun(s3) ? "Yes" : "No");
        
        pw.flush();
    } main {
        Scanner sc = new Scanner(System.in);
        PrintWriter pw = new PrintWriter(System.out);
//        sc.useDelimiter("\n");

        String s = sc.next();
        int n = s.length();
        String s2 = s.substring(0, (n-1)/2);
        String s3 = s.substring((n+3)/2-1);
        pw.println(kaibun(s) && kaibun(s2) && kaibun(s3) ? "Yes" : "No");
        
        pw.flush();
    } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) PrintWriter pw = new PrintWriter(System.out); pw new PrintWriter(System.out) String s = sc.next(); s sc.next() sc.next sc int n = s.length(); n s.length() s.length s String s2 = s.substring(0, (n-1)/2); s2 s.substring(0, (n-1)/2) s.substring s 0 (n-1)/2 (n-1) n 1 2 String s3 = s.substring((n+3)/2-1); s3 s.substring((n+3)/2-1) s.substring s (n+3)/2-1 (n+3)/2 (n+3) n 3 2 1 pw.println(kaibun(s) && kaibun(s2) && kaibun(s3) ? "Yes" : "No") pw.println pw kaibun(s) && kaibun(s2) && kaibun(s3) ? "Yes" : "No" kaibun(s) && kaibun(s2) && kaibun(s3) kaibun(s) && kaibun(s2) && kaibun(s3) kaibun(s) kaibun s kaibun(s2) kaibun s2 kaibun(s3) kaibun s3 "Yes" "No" pw.flush() pw.flush pw String[] args args public static boolean kaibun (String str) {
        int n = str.length();
        for (int i = 0; i < n; i++)
            if (str.charAt(i) != str.charAt(n-1-i)) return false;
        return true;
    } kaibun {
        int n = str.length();
        for (int i = 0; i < n; i++)
            if (str.charAt(i) != str.charAt(n-1-i)) return false;
        return true;
    } int n = str.length(); n str.length() str.length str for (int i = 0; i < n; i++)
            if (str.charAt(i) != str.charAt(n-1-i)) return false; int i = 0; int i = 0; i 0 i < n i n i++ i++ i if (str.charAt(i) != str.charAt(n-1-i)) return false; if (str.charAt(i) != str.charAt(n-1-i)) return false; str.charAt(i) != str.charAt(n-1-i) str.charAt(i) str.charAt str i str.charAt(n-1-i) str.charAt str n-1-i n-1-i n 1 i return false; false return true; true String str str public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        PrintWriter pw = new PrintWriter(System.out);
//        sc.useDelimiter("\n");

        String s = sc.next();
        int n = s.length();
        String s2 = s.substring(0, (n-1)/2);
        String s3 = s.substring((n+3)/2-1);
        pw.println(kaibun(s) && kaibun(s2) && kaibun(s3) ? "Yes" : "No");
        
        pw.flush();
    }

    public static boolean kaibun (String str) {
        int n = str.length();
        for (int i = 0; i < n; i++)
            if (str.charAt(i) != str.charAt(n-1-i)) return false;
        return true;
    }
} public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        PrintWriter pw = new PrintWriter(System.out);
//        sc.useDelimiter("\n");

        String s = sc.next();
        int n = s.length();
        String s2 = s.substring(0, (n-1)/2);
        String s3 = s.substring((n+3)/2-1);
        pw.println(kaibun(s) && kaibun(s2) && kaibun(s3) ? "Yes" : "No");
        
        pw.flush();
    }

    public static boolean kaibun (String str) {
        int n = str.length();
        for (int i = 0; i < n; i++)
            if (str.charAt(i) != str.charAt(n-1-i)) return false;
        return true;
    }
} Main
import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        PrintWriter pw = new PrintWriter(System.out);
//        sc.useDelimiter("\n");

        String s = sc.next();
        int n = s.length();
        String s2 = s.substring(0, (n-1)/2);
        String s3 = s.substring((n+3)/2-1);
        pw.println(kaibun(s) && kaibun(s2) && kaibun(s3) ? "Yes" : "No");
        
        pw.flush();
    }

    public static boolean kaibun (String str) {
        int n = str.length();
        for (int i = 0; i < n; i++)
            if (str.charAt(i) != str.charAt(n-1-i)) return false;
        return true;
    }
}