import java.util.*;

public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main.run();
    }
    
    // 変数一覧
    String s;
    char[] ch;
    char[] ch1;
    char[] ch2;

    public void run() {
        // 入力情報取得
        Scanner sc = new Scanner(System.in);
        s = sc.next();
        ch = s.toCharArray();
        sc.close();

        // 解答処理
        solve();
    }
    
    private void solve() {
        int n = ch.length;
        boolean c1 = true;
        boolean c2 = true;
        boolean c3 = true;

        ch1 = new char[(n - 1) / 2];
        ch2 = new char[(n - 1) / 2];
        for (int i = 0; i < (n - 1) / 2; i++) {
            ch1[i] = ch[i];
        }
        for (int i = 0; i <= n - (n + 3) / 2; i++) {
            ch2[i] = ch[i - 1 + ((n + 3) / 2)];
        }
        c1 = check(ch);
        c2 = check(ch1);
        c3 = check(ch2);
        if (c1 && c2 && c3) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }
    }
    
    private boolean check(char[] target) {
        boolean res = true;
        for (int i = 0; i < target.length / 2; i++) {
            if (target[i] != target[target.length - i - 1]) {
                res = false;
            }
        }
        return res;
    }
} import java.util.*; util.* java public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main.run();
    }
    
    // 変数一覧
    String s;
    char[] ch;
    char[] ch1;
    char[] ch2;

    public void run() {
        // 入力情報取得
        Scanner sc = new Scanner(System.in);
        s = sc.next();
        ch = s.toCharArray();
        sc.close();

        // 解答処理
        solve();
    }
    
    private void solve() {
        int n = ch.length;
        boolean c1 = true;
        boolean c2 = true;
        boolean c3 = true;

        ch1 = new char[(n - 1) / 2];
        ch2 = new char[(n - 1) / 2];
        for (int i = 0; i < (n - 1) / 2; i++) {
            ch1[i] = ch[i];
        }
        for (int i = 0; i <= n - (n + 3) / 2; i++) {
            ch2[i] = ch[i - 1 + ((n + 3) / 2)];
        }
        c1 = check(ch);
        c2 = check(ch1);
        c3 = check(ch2);
        if (c1 && c2 && c3) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }
    }
    
    private boolean check(char[] target) {
        boolean res = true;
        for (int i = 0; i < target.length / 2; i++) {
            if (target[i] != target[target.length - i - 1]) {
                res = false;
            }
        }
        return res;
    }
} Main // 変数一覧
    String s; s char[] ch; ch char[] ch1; ch1 char[] ch2; ch2 public static void main(String[] args) {
        Main main = new Main();
        main.run();
    } main {
        Main main = new Main();
        main.run();
    } Main main = new Main(); main new Main() main.run() main.run main String[] args args public void run() {
        // 入力情報取得
        Scanner sc = new Scanner(System.in);
        s = sc.next();
        ch = s.toCharArray();
        sc.close();

        // 解答処理
        solve();
    } run {
        // 入力情報取得
        Scanner sc = new Scanner(System.in);
        s = sc.next();
        ch = s.toCharArray();
        sc.close();

        // 解答処理
        solve();
    } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) s = sc.next() s sc.next() sc.next sc ch = s.toCharArray() ch s.toCharArray() s.toCharArray s sc.close() sc.close sc solve() solve private void solve() {
        int n = ch.length;
        boolean c1 = true;
        boolean c2 = true;
        boolean c3 = true;

        ch1 = new char[(n - 1) / 2];
        ch2 = new char[(n - 1) / 2];
        for (int i = 0; i < (n - 1) / 2; i++) {
            ch1[i] = ch[i];
        }
        for (int i = 0; i <= n - (n + 3) / 2; i++) {
            ch2[i] = ch[i - 1 + ((n + 3) / 2)];
        }
        c1 = check(ch);
        c2 = check(ch1);
        c3 = check(ch2);
        if (c1 && c2 && c3) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }
    } solve {
        int n = ch.length;
        boolean c1 = true;
        boolean c2 = true;
        boolean c3 = true;

        ch1 = new char[(n - 1) / 2];
        ch2 = new char[(n - 1) / 2];
        for (int i = 0; i < (n - 1) / 2; i++) {
            ch1[i] = ch[i];
        }
        for (int i = 0; i <= n - (n + 3) / 2; i++) {
            ch2[i] = ch[i - 1 + ((n + 3) / 2)];
        }
        c1 = check(ch);
        c2 = check(ch1);
        c3 = check(ch2);
        if (c1 && c2 && c3) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }
    } int n = ch.length; n ch.length ch ch.length boolean c1 = true; c1 true boolean c2 = true; c2 true boolean c3 = true; c3 true ch1 = new char[(n - 1) / 2] ch1 new char[(n - 1) / 2] (n - 1) / 2 (n - 1) n 1 2 ch2 = new char[(n - 1) / 2] ch2 new char[(n - 1) / 2] (n - 1) / 2 (n - 1) n 1 2 for (int i = 0; i < (n - 1) / 2; i++) {
            ch1[i] = ch[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 {
            ch1[i] = ch[i];
        } {
            ch1[i] = ch[i];
        } ch1[i] = ch[i] ch1[i] ch1 i ch[i] ch i for (int i = 0; i <= n - (n + 3) / 2; i++) {
            ch2[i] = ch[i - 1 + ((n + 3) / 2)];
        } int i = 0; int i = 0; i 0 i <= n - (n + 3) / 2 i n - (n + 3) / 2 n (n + 3) / 2 (n + 3) n 3 2 i++ i++ i {
            ch2[i] = ch[i - 1 + ((n + 3) / 2)];
        } {
            ch2[i] = ch[i - 1 + ((n + 3) / 2)];
        } ch2[i] = ch[i - 1 + ((n + 3) / 2)] ch2[i] ch2 i ch[i - 1 + ((n + 3) / 2)] ch i - 1 + ((n + 3) / 2) i - 1 i 1 ((n + 3) / 2) (n + 3) n 3 2 c1 = check(ch) c1 check(ch) check ch c2 = check(ch1) c2 check(ch1) check ch1 c3 = check(ch2) c3 check(ch2) check ch2 if (c1 && c2 && c3) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        } c1 && c2 && c3 c1 && c2 && c3 c1 c2 c3 {
            System.out.println("Yes");
        } System.out.println("Yes") System.out.println System.out System System.out "Yes" {
            System.out.println("No");
        } System.out.println("No") System.out.println System.out System System.out "No" private boolean check(char[] target) {
        boolean res = true;
        for (int i = 0; i < target.length / 2; i++) {
            if (target[i] != target[target.length - i - 1]) {
                res = false;
            }
        }
        return res;
    } check {
        boolean res = true;
        for (int i = 0; i < target.length / 2; i++) {
            if (target[i] != target[target.length - i - 1]) {
                res = false;
            }
        }
        return res;
    } boolean res = true; res true for (int i = 0; i < target.length / 2; i++) {
            if (target[i] != target[target.length - i - 1]) {
                res = false;
            }
        } int i = 0; int i = 0; i 0 i < target.length / 2 i target.length / 2 target.length target target.length 2 i++ i++ i {
            if (target[i] != target[target.length - i - 1]) {
                res = false;
            }
        } {
            if (target[i] != target[target.length - i - 1]) {
                res = false;
            }
        } if (target[i] != target[target.length - i - 1]) {
                res = false;
            } target[i] != target[target.length - i - 1] target[i] target i target[target.length - i - 1] target target.length - i - 1 target.length - i - 1 target.length target target.length i 1 {
                res = false;
            } res = false res false return res; res char[] target target public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main.run();
    }
    
    // 変数一覧
    String s;
    char[] ch;
    char[] ch1;
    char[] ch2;

    public void run() {
        // 入力情報取得
        Scanner sc = new Scanner(System.in);
        s = sc.next();
        ch = s.toCharArray();
        sc.close();

        // 解答処理
        solve();
    }
    
    private void solve() {
        int n = ch.length;
        boolean c1 = true;
        boolean c2 = true;
        boolean c3 = true;

        ch1 = new char[(n - 1) / 2];
        ch2 = new char[(n - 1) / 2];
        for (int i = 0; i < (n - 1) / 2; i++) {
            ch1[i] = ch[i];
        }
        for (int i = 0; i <= n - (n + 3) / 2; i++) {
            ch2[i] = ch[i - 1 + ((n + 3) / 2)];
        }
        c1 = check(ch);
        c2 = check(ch1);
        c3 = check(ch2);
        if (c1 && c2 && c3) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }
    }
    
    private boolean check(char[] target) {
        boolean res = true;
        for (int i = 0; i < target.length / 2; i++) {
            if (target[i] != target[target.length - i - 1]) {
                res = false;
            }
        }
        return res;
    }
} public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main.run();
    }
    
    // 変数一覧
    String s;
    char[] ch;
    char[] ch1;
    char[] ch2;

    public void run() {
        // 入力情報取得
        Scanner sc = new Scanner(System.in);
        s = sc.next();
        ch = s.toCharArray();
        sc.close();

        // 解答処理
        solve();
    }
    
    private void solve() {
        int n = ch.length;
        boolean c1 = true;
        boolean c2 = true;
        boolean c3 = true;

        ch1 = new char[(n - 1) / 2];
        ch2 = new char[(n - 1) / 2];
        for (int i = 0; i < (n - 1) / 2; i++) {
            ch1[i] = ch[i];
        }
        for (int i = 0; i <= n - (n + 3) / 2; i++) {
            ch2[i] = ch[i - 1 + ((n + 3) / 2)];
        }
        c1 = check(ch);
        c2 = check(ch1);
        c3 = check(ch2);
        if (c1 && c2 && c3) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }
    }
    
    private boolean check(char[] target) {
        boolean res = true;
        for (int i = 0; i < target.length / 2; i++) {
            if (target[i] != target[target.length - i - 1]) {
                res = false;
            }
        }
        return res;
    }
} Main
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main.run();
    }
    
    // 変数一覧
    String s;
    char[] ch;
    char[] ch1;
    char[] ch2;

    public void run() {
        // 入力情報取得
        Scanner sc = new Scanner(System.in);
        s = sc.next();
        ch = s.toCharArray();
        sc.close();

        // 解答処理
        solve();
    }
    
    private void solve() {
        int n = ch.length;
        boolean c1 = true;
        boolean c2 = true;
        boolean c3 = true;

        ch1 = new char[(n - 1) / 2];
        ch2 = new char[(n - 1) / 2];
        for (int i = 0; i < (n - 1) / 2; i++) {
            ch1[i] = ch[i];
        }
        for (int i = 0; i <= n - (n + 3) / 2; i++) {
            ch2[i] = ch[i - 1 + ((n + 3) / 2)];
        }
        c1 = check(ch);
        c2 = check(ch1);
        c3 = check(ch2);
        if (c1 && c2 && c3) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }
    }
    
    private boolean check(char[] target) {
        boolean res = true;
        for (int i = 0; i < target.length / 2; i++) {
            if (target[i] != target[target.length - i - 1]) {
                res = false;
            }
        }
        return res;
    }
}