import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int n = s.length();
        String str1 = s.substring(0, (n - 1) / 2);
        String str2 = s.substring(((n + 3) - 1) / 2);
        String answer = "No";
        if (checkKaibun(s) && checkKaibun(str1) && checkKaibun(str2)) {
            answer = "Yes";
        }
        System.out.println(answer);
        sc.close();
    }

    // 文字列sを反転
    private static String reverseStr(String s) {
        StringBuilder sb = new StringBuilder(s);
        sb.reverse();
        return sb.toString();
    }

    // 文字列sが回文かどうか判定
    private static boolean checkKaibun(String s) {
        if (s.equals(reverseStr(s))) {
            return true;
        }
        return false;
    }

} import java.util.Scanner; Scanner 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();
        String str1 = s.substring(0, (n - 1) / 2);
        String str2 = s.substring(((n + 3) - 1) / 2);
        String answer = "No";
        if (checkKaibun(s) && checkKaibun(str1) && checkKaibun(str2)) {
            answer = "Yes";
        }
        System.out.println(answer);
        sc.close();
    }

    // 文字列sを反転
    private static String reverseStr(String s) {
        StringBuilder sb = new StringBuilder(s);
        sb.reverse();
        return sb.toString();
    }

    // 文字列sが回文かどうか判定
    private static boolean checkKaibun(String s) {
        if (s.equals(reverseStr(s))) {
            return true;
        }
        return false;
    }

} Main public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int n = s.length();
        String str1 = s.substring(0, (n - 1) / 2);
        String str2 = s.substring(((n + 3) - 1) / 2);
        String answer = "No";
        if (checkKaibun(s) && checkKaibun(str1) && checkKaibun(str2)) {
            answer = "Yes";
        }
        System.out.println(answer);
        sc.close();
    } main {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int n = s.length();
        String str1 = s.substring(0, (n - 1) / 2);
        String str2 = s.substring(((n + 3) - 1) / 2);
        String answer = "No";
        if (checkKaibun(s) && checkKaibun(str1) && checkKaibun(str2)) {
            answer = "Yes";
        }
        System.out.println(answer);
        sc.close();
    } 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 String str1 = s.substring(0, (n - 1) / 2); str1 s.substring(0, (n - 1) / 2) s.substring s 0 (n - 1) / 2 (n - 1) n 1 2 String str2 = s.substring(((n + 3) - 1) / 2); str2 s.substring(((n + 3) - 1) / 2) s.substring s ((n + 3) - 1) / 2 ((n + 3) - 1) (n + 3) n 3 1 2 String answer = "No"; answer "No" if (checkKaibun(s) && checkKaibun(str1) && checkKaibun(str2)) {
            answer = "Yes";
        } checkKaibun(s) && checkKaibun(str1) && checkKaibun(str2) checkKaibun(s) && checkKaibun(str1) && checkKaibun(str2) checkKaibun(s) checkKaibun s checkKaibun(str1) checkKaibun str1 checkKaibun(str2) checkKaibun str2 {
            answer = "Yes";
        } answer = "Yes" answer "Yes" System.out.println(answer) System.out.println System.out System System.out answer sc.close() sc.close sc String[] args args // 文字列sを反転
    private static String reverseStr(String s) {
        StringBuilder sb = new StringBuilder(s);
        sb.reverse();
        return sb.toString();
    } reverseStr {
        StringBuilder sb = new StringBuilder(s);
        sb.reverse();
        return sb.toString();
    } StringBuilder sb = new StringBuilder(s); sb new StringBuilder(s) sb.reverse() sb.reverse sb return sb.toString(); sb.toString() sb.toString sb String s s // 文字列sが回文かどうか判定
    private static boolean checkKaibun(String s) {
        if (s.equals(reverseStr(s))) {
            return true;
        }
        return false;
    } checkKaibun {
        if (s.equals(reverseStr(s))) {
            return true;
        }
        return false;
    } if (s.equals(reverseStr(s))) {
            return true;
        } s.equals(reverseStr(s)) s.equals s reverseStr(s) reverseStr s {
            return true;
        } return true; true return false; false String s s public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int n = s.length();
        String str1 = s.substring(0, (n - 1) / 2);
        String str2 = s.substring(((n + 3) - 1) / 2);
        String answer = "No";
        if (checkKaibun(s) && checkKaibun(str1) && checkKaibun(str2)) {
            answer = "Yes";
        }
        System.out.println(answer);
        sc.close();
    }

    // 文字列sを反転
    private static String reverseStr(String s) {
        StringBuilder sb = new StringBuilder(s);
        sb.reverse();
        return sb.toString();
    }

    // 文字列sが回文かどうか判定
    private static boolean checkKaibun(String s) {
        if (s.equals(reverseStr(s))) {
            return true;
        }
        return false;
    }

} public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int n = s.length();
        String str1 = s.substring(0, (n - 1) / 2);
        String str2 = s.substring(((n + 3) - 1) / 2);
        String answer = "No";
        if (checkKaibun(s) && checkKaibun(str1) && checkKaibun(str2)) {
            answer = "Yes";
        }
        System.out.println(answer);
        sc.close();
    }

    // 文字列sを反転
    private static String reverseStr(String s) {
        StringBuilder sb = new StringBuilder(s);
        sb.reverse();
        return sb.toString();
    }

    // 文字列sが回文かどうか判定
    private static boolean checkKaibun(String s) {
        if (s.equals(reverseStr(s))) {
            return true;
        }
        return false;
    }

} Main
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int n = s.length();
        String str1 = s.substring(0, (n - 1) / 2);
        String str2 = s.substring(((n + 3) - 1) / 2);
        String answer = "No";
        if (checkKaibun(s) && checkKaibun(str1) && checkKaibun(str2)) {
            answer = "Yes";
        }
        System.out.println(answer);
        sc.close();
    }

    // 文字列sを反転
    private static String reverseStr(String s) {
        StringBuilder sb = new StringBuilder(s);
        sb.reverse();
        return sb.toString();
    }

    // 文字列sが回文かどうか判定
    private static boolean checkKaibun(String s) {
        if (s.equals(reverseStr(s))) {
            return true;
        }
        return false;
    }

}
