import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main.solve();
    }

    public void solve() {
        Scanner scan = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
        String S = scan.next();

        char[] data = S.toCharArray();
        int len = data.length;
        if (!is_kaibun(S, 1, len)) {
            System.out.println("No");
            return;
        }
        if (!is_kaibun(S, 1, (len-1)/2)) {
            System.out.println("No");
            return;
        }
        if (!is_kaibun(S, (len+3)/2, len)) {
            System.out.println("No");
            return;
        }
        System.out.println("Yes");
    }

    private boolean is_kaibun(String S, int start, int end) {
        String org = S.substring(start-1, end);
        StringBuilder sb = new StringBuilder(org);
        String tran = sb.reverse().toString();
        return org.equals(tran);
    }
} import java.io.BufferedReader; BufferedReader java.io import java.io.InputStreamReader; InputStreamReader java.io import java.util.Scanner; Scanner java.util public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main.solve();
    }

    public void solve() {
        Scanner scan = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
        String S = scan.next();

        char[] data = S.toCharArray();
        int len = data.length;
        if (!is_kaibun(S, 1, len)) {
            System.out.println("No");
            return;
        }
        if (!is_kaibun(S, 1, (len-1)/2)) {
            System.out.println("No");
            return;
        }
        if (!is_kaibun(S, (len+3)/2, len)) {
            System.out.println("No");
            return;
        }
        System.out.println("Yes");
    }

    private boolean is_kaibun(String S, int start, int end) {
        String org = S.substring(start-1, end);
        StringBuilder sb = new StringBuilder(org);
        String tran = sb.reverse().toString();
        return org.equals(tran);
    }
} Main public static void main(String[] args) {
        Main main = new Main();
        main.solve();
    } main {
        Main main = new Main();
        main.solve();
    } Main main = new Main(); main new Main() main.solve() main.solve main String[] args args public void solve() {
        Scanner scan = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
        String S = scan.next();

        char[] data = S.toCharArray();
        int len = data.length;
        if (!is_kaibun(S, 1, len)) {
            System.out.println("No");
            return;
        }
        if (!is_kaibun(S, 1, (len-1)/2)) {
            System.out.println("No");
            return;
        }
        if (!is_kaibun(S, (len+3)/2, len)) {
            System.out.println("No");
            return;
        }
        System.out.println("Yes");
    } solve {
        Scanner scan = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
        String S = scan.next();

        char[] data = S.toCharArray();
        int len = data.length;
        if (!is_kaibun(S, 1, len)) {
            System.out.println("No");
            return;
        }
        if (!is_kaibun(S, 1, (len-1)/2)) {
            System.out.println("No");
            return;
        }
        if (!is_kaibun(S, (len+3)/2, len)) {
            System.out.println("No");
            return;
        }
        System.out.println("Yes");
    } Scanner scan = new Scanner(new BufferedReader(new InputStreamReader(System.in))); scan new Scanner(new BufferedReader(new InputStreamReader(System.in))) String S = scan.next(); S scan.next() scan.next scan char[] data = S.toCharArray(); data S.toCharArray() S.toCharArray S int len = data.length; len data.length data data.length if (!is_kaibun(S, 1, len)) {
            System.out.println("No");
            return;
        } !is_kaibun(S, 1, len) is_kaibun(S, 1, len) is_kaibun S 1 len {
            System.out.println("No");
            return;
        } System.out.println("No") System.out.println System.out System System.out "No" return; if (!is_kaibun(S, 1, (len-1)/2)) {
            System.out.println("No");
            return;
        } !is_kaibun(S, 1, (len-1)/2) is_kaibun(S, 1, (len-1)/2) is_kaibun S 1 (len-1)/2 (len-1) len 1 2 {
            System.out.println("No");
            return;
        } System.out.println("No") System.out.println System.out System System.out "No" return; if (!is_kaibun(S, (len+3)/2, len)) {
            System.out.println("No");
            return;
        } !is_kaibun(S, (len+3)/2, len) is_kaibun(S, (len+3)/2, len) is_kaibun S (len+3)/2 (len+3) len 3 2 len {
            System.out.println("No");
            return;
        } System.out.println("No") System.out.println System.out System System.out "No" return; System.out.println("Yes") System.out.println System.out System System.out "Yes" private boolean is_kaibun(String S, int start, int end) {
        String org = S.substring(start-1, end);
        StringBuilder sb = new StringBuilder(org);
        String tran = sb.reverse().toString();
        return org.equals(tran);
    } is_kaibun {
        String org = S.substring(start-1, end);
        StringBuilder sb = new StringBuilder(org);
        String tran = sb.reverse().toString();
        return org.equals(tran);
    } String org = S.substring(start-1, end); org S.substring(start-1, end) S.substring S start-1 start 1 end StringBuilder sb = new StringBuilder(org); sb new StringBuilder(org) String tran = sb.reverse().toString(); tran sb.reverse().toString() sb.reverse().toString sb.reverse() sb.reverse sb return org.equals(tran); org.equals(tran) org.equals org tran String S S int start start int end end public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main.solve();
    }

    public void solve() {
        Scanner scan = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
        String S = scan.next();

        char[] data = S.toCharArray();
        int len = data.length;
        if (!is_kaibun(S, 1, len)) {
            System.out.println("No");
            return;
        }
        if (!is_kaibun(S, 1, (len-1)/2)) {
            System.out.println("No");
            return;
        }
        if (!is_kaibun(S, (len+3)/2, len)) {
            System.out.println("No");
            return;
        }
        System.out.println("Yes");
    }

    private boolean is_kaibun(String S, int start, int end) {
        String org = S.substring(start-1, end);
        StringBuilder sb = new StringBuilder(org);
        String tran = sb.reverse().toString();
        return org.equals(tran);
    }
} public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main.solve();
    }

    public void solve() {
        Scanner scan = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
        String S = scan.next();

        char[] data = S.toCharArray();
        int len = data.length;
        if (!is_kaibun(S, 1, len)) {
            System.out.println("No");
            return;
        }
        if (!is_kaibun(S, 1, (len-1)/2)) {
            System.out.println("No");
            return;
        }
        if (!is_kaibun(S, (len+3)/2, len)) {
            System.out.println("No");
            return;
        }
        System.out.println("Yes");
    }

    private boolean is_kaibun(String S, int start, int end) {
        String org = S.substring(start-1, end);
        StringBuilder sb = new StringBuilder(org);
        String tran = sb.reverse().toString();
        return org.equals(tran);
    }
} Main
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main.solve();
    }

    public void solve() {
        Scanner scan = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
        String S = scan.next();

        char[] data = S.toCharArray();
        int len = data.length;
        if (!is_kaibun(S, 1, len)) {
            System.out.println("No");
            return;
        }
        if (!is_kaibun(S, 1, (len-1)/2)) {
            System.out.println("No");
            return;
        }
        if (!is_kaibun(S, (len+3)/2, len)) {
            System.out.println("No");
            return;
        }
        System.out.println("Yes");
    }

    private boolean is_kaibun(String S, int start, int end) {
        String org = S.substring(start-1, end);
        StringBuilder sb = new StringBuilder(org);
        String tran = sb.reverse().toString();
        return org.equals(tran);
    }
}
