import java.io.*;
import java.util.*;

public class Main {

    static List<Integer> al[];
    private  static void solver(InputReader sc, PrintWriter out) throws Exception {
        String s = sc.next();
        StringBuilder sb2 = new StringBuilder(s);
        String ans = sb2.reverse().toString();
        int n = s.length();
        int a  = n /2;
        int b = (n/2)+1;
        String x =s.substring(0, a);
        String y = s.substring(b,n);
        x = x.trim(); y = y.trim();
        if(a != n-b)
            throw new Exception();
        StringBuilder sb = new StringBuilder(x);
        StringBuilder sb1 = new StringBuilder(y);
        String z = sb.reverse().toString(); String z1  = sb1.reverse().toString();
        if(ans.equals(s) && x.equals(z) && y.equals(z1))
            out.println("Yes");
        else
            out.println("No");

    }

    public static void main(String[] args) throws Exception{
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        solver(in,out);
        out.close();
    }
    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }
        public long nextLong(){
            return Long.parseLong(next());
        }

        public long[] readLongArr(int n){
            long arr[] = new long[n];
            for(int i=0; i<n; i++){
                arr[i] = nextLong();
            }
            return arr;
        }
        public int[] readIntArr(int n){
            int arr[] = new int[n];
            for(int i=0; i<n; i++){
                arr[i] = nextInt();
            }
            return arr;
        }
    }
} import java.io.*; io.* java import java.util.*; util.* java public class Main {

    static List<Integer> al[];
    private  static void solver(InputReader sc, PrintWriter out) throws Exception {
        String s = sc.next();
        StringBuilder sb2 = new StringBuilder(s);
        String ans = sb2.reverse().toString();
        int n = s.length();
        int a  = n /2;
        int b = (n/2)+1;
        String x =s.substring(0, a);
        String y = s.substring(b,n);
        x = x.trim(); y = y.trim();
        if(a != n-b)
            throw new Exception();
        StringBuilder sb = new StringBuilder(x);
        StringBuilder sb1 = new StringBuilder(y);
        String z = sb.reverse().toString(); String z1  = sb1.reverse().toString();
        if(ans.equals(s) && x.equals(z) && y.equals(z1))
            out.println("Yes");
        else
            out.println("No");

    }

    public static void main(String[] args) throws Exception{
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        solver(in,out);
        out.close();
    }
    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }
        public long nextLong(){
            return Long.parseLong(next());
        }

        public long[] readLongArr(int n){
            long arr[] = new long[n];
            for(int i=0; i<n; i++){
                arr[i] = nextLong();
            }
            return arr;
        }
        public int[] readIntArr(int n){
            int arr[] = new int[n];
            for(int i=0; i<n; i++){
                arr[i] = nextInt();
            }
            return arr;
        }
    }
} Main static List<Integer> al[]; al private  static void solver(InputReader sc, PrintWriter out) throws Exception {
        String s = sc.next();
        StringBuilder sb2 = new StringBuilder(s);
        String ans = sb2.reverse().toString();
        int n = s.length();
        int a  = n /2;
        int b = (n/2)+1;
        String x =s.substring(0, a);
        String y = s.substring(b,n);
        x = x.trim(); y = y.trim();
        if(a != n-b)
            throw new Exception();
        StringBuilder sb = new StringBuilder(x);
        StringBuilder sb1 = new StringBuilder(y);
        String z = sb.reverse().toString(); String z1  = sb1.reverse().toString();
        if(ans.equals(s) && x.equals(z) && y.equals(z1))
            out.println("Yes");
        else
            out.println("No");

    } solver {
        String s = sc.next();
        StringBuilder sb2 = new StringBuilder(s);
        String ans = sb2.reverse().toString();
        int n = s.length();
        int a  = n /2;
        int b = (n/2)+1;
        String x =s.substring(0, a);
        String y = s.substring(b,n);
        x = x.trim(); y = y.trim();
        if(a != n-b)
            throw new Exception();
        StringBuilder sb = new StringBuilder(x);
        StringBuilder sb1 = new StringBuilder(y);
        String z = sb.reverse().toString(); String z1  = sb1.reverse().toString();
        if(ans.equals(s) && x.equals(z) && y.equals(z1))
            out.println("Yes");
        else
            out.println("No");

    } String s = sc.next(); s sc.next() sc.next sc StringBuilder sb2 = new StringBuilder(s); sb2 new StringBuilder(s) String ans = sb2.reverse().toString(); ans sb2.reverse().toString() sb2.reverse().toString sb2.reverse() sb2.reverse sb2 int n = s.length(); n s.length() s.length s int a  = n /2; a n /2 n 2 int b = (n/2)+1; b (n/2)+1 (n/2) n 2 1 String x =s.substring(0, a); x s.substring(0, a) s.substring s 0 a String y = s.substring(b,n); y s.substring(b,n) s.substring s b n x = x.trim() x x.trim() x.trim x y = y.trim() y y.trim() y.trim y if(a != n-b)
            throw new Exception(); a != n-b a n-b n b throw new Exception(); new Exception() StringBuilder sb = new StringBuilder(x); sb new StringBuilder(x) StringBuilder sb1 = new StringBuilder(y); sb1 new StringBuilder(y) String z = sb.reverse().toString(); z sb.reverse().toString() sb.reverse().toString sb.reverse() sb.reverse sb String z1  = sb1.reverse().toString(); z1 sb1.reverse().toString() sb1.reverse().toString sb1.reverse() sb1.reverse sb1 if(ans.equals(s) && x.equals(z) && y.equals(z1))
            out.println("Yes");
        else
            out.println("No"); ans.equals(s) && x.equals(z) && y.equals(z1) ans.equals(s) && x.equals(z) && y.equals(z1) ans.equals(s) ans.equals ans s x.equals(z) x.equals x z y.equals(z1) y.equals y z1 out.println("Yes") out.println out "Yes" out.println("No") out.println out "No" InputReader sc sc PrintWriter out out public static void main(String[] args) throws Exception{
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        solver(in,out);
        out.close();
    } main {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        solver(in,out);
        out.close();
    } InputStream inputStream = System.in; inputStream System.in System System.in OutputStream outputStream = System.out; outputStream System.out System System.out InputReader in = new InputReader(inputStream); in new InputReader(inputStream) PrintWriter out = new PrintWriter(outputStream); out new PrintWriter(outputStream) solver(in,out) solver in out out.close() out.close out String[] args args static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }
        public long nextLong(){
            return Long.parseLong(next());
        }

        public long[] readLongArr(int n){
            long arr[] = new long[n];
            for(int i=0; i<n; i++){
                arr[i] = nextLong();
            }
            return arr;
        }
        public int[] readIntArr(int n){
            int arr[] = new int[n];
            for(int i=0; i<n; i++){
                arr[i] = nextInt();
            }
            return arr;
        }
    } InputReader public BufferedReader reader; reader public StringTokenizer tokenizer; tokenizer public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        } InputReader {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        } reader = new BufferedReader(new InputStreamReader(stream), 32768) reader new BufferedReader(new InputStreamReader(stream), 32768) tokenizer = null tokenizer null InputStream stream stream public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        } next {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        } while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            } tokenizer == null || !tokenizer.hasMoreTokens() tokenizer == null tokenizer null !tokenizer.hasMoreTokens() tokenizer.hasMoreTokens() tokenizer.hasMoreTokens tokenizer {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            } try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                } IOException e {
                    throw new RuntimeException(e);
                } throw new RuntimeException(e); new RuntimeException(e) {
                    tokenizer = new StringTokenizer(reader.readLine());
                } tokenizer = new StringTokenizer(reader.readLine()) tokenizer new StringTokenizer(reader.readLine()) return tokenizer.nextToken(); tokenizer.nextToken() tokenizer.nextToken tokenizer public int nextInt() {
            return Integer.parseInt(next());
        } nextInt {
            return Integer.parseInt(next());
        } return Integer.parseInt(next()); Integer.parseInt(next()) Integer.parseInt Integer next() next public long nextLong(){
            return Long.parseLong(next());
        } nextLong {
            return Long.parseLong(next());
        } return Long.parseLong(next()); Long.parseLong(next()) Long.parseLong Long next() next public long[] readLongArr(int n){
            long arr[] = new long[n];
            for(int i=0; i<n; i++){
                arr[i] = nextLong();
            }
            return arr;
        } readLongArr {
            long arr[] = new long[n];
            for(int i=0; i<n; i++){
                arr[i] = nextLong();
            }
            return arr;
        } long arr[] = new long[n]; arr new long[n] n for(int i=0; i<n; i++){
                arr[i] = nextLong();
            } int i=0; int i=0; i 0 i<n i n i++ i++ i {
                arr[i] = nextLong();
            } {
                arr[i] = nextLong();
            } arr[i] = nextLong() arr[i] arr i nextLong() nextLong return arr; arr int n n public int[] readIntArr(int n){
            int arr[] = new int[n];
            for(int i=0; i<n; i++){
                arr[i] = nextInt();
            }
            return arr;
        } readIntArr {
            int arr[] = new int[n];
            for(int i=0; i<n; i++){
                arr[i] = nextInt();
            }
            return arr;
        } int arr[] = new int[n]; arr new int[n] n for(int i=0; i<n; i++){
                arr[i] = nextInt();
            } int i=0; int i=0; i 0 i<n i n i++ i++ i {
                arr[i] = nextInt();
            } {
                arr[i] = nextInt();
            } arr[i] = nextInt() arr[i] arr i nextInt() nextInt return arr; arr int n n public class Main {

    static List<Integer> al[];
    private  static void solver(InputReader sc, PrintWriter out) throws Exception {
        String s = sc.next();
        StringBuilder sb2 = new StringBuilder(s);
        String ans = sb2.reverse().toString();
        int n = s.length();
        int a  = n /2;
        int b = (n/2)+1;
        String x =s.substring(0, a);
        String y = s.substring(b,n);
        x = x.trim(); y = y.trim();
        if(a != n-b)
            throw new Exception();
        StringBuilder sb = new StringBuilder(x);
        StringBuilder sb1 = new StringBuilder(y);
        String z = sb.reverse().toString(); String z1  = sb1.reverse().toString();
        if(ans.equals(s) && x.equals(z) && y.equals(z1))
            out.println("Yes");
        else
            out.println("No");

    }

    public static void main(String[] args) throws Exception{
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        solver(in,out);
        out.close();
    }
    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }
        public long nextLong(){
            return Long.parseLong(next());
        }

        public long[] readLongArr(int n){
            long arr[] = new long[n];
            for(int i=0; i<n; i++){
                arr[i] = nextLong();
            }
            return arr;
        }
        public int[] readIntArr(int n){
            int arr[] = new int[n];
            for(int i=0; i<n; i++){
                arr[i] = nextInt();
            }
            return arr;
        }
    }
} public class Main {

    static List<Integer> al[];
    private  static void solver(InputReader sc, PrintWriter out) throws Exception {
        String s = sc.next();
        StringBuilder sb2 = new StringBuilder(s);
        String ans = sb2.reverse().toString();
        int n = s.length();
        int a  = n /2;
        int b = (n/2)+1;
        String x =s.substring(0, a);
        String y = s.substring(b,n);
        x = x.trim(); y = y.trim();
        if(a != n-b)
            throw new Exception();
        StringBuilder sb = new StringBuilder(x);
        StringBuilder sb1 = new StringBuilder(y);
        String z = sb.reverse().toString(); String z1  = sb1.reverse().toString();
        if(ans.equals(s) && x.equals(z) && y.equals(z1))
            out.println("Yes");
        else
            out.println("No");

    }

    public static void main(String[] args) throws Exception{
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        solver(in,out);
        out.close();
    }
    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }
        public long nextLong(){
            return Long.parseLong(next());
        }

        public long[] readLongArr(int n){
            long arr[] = new long[n];
            for(int i=0; i<n; i++){
                arr[i] = nextLong();
            }
            return arr;
        }
        public int[] readIntArr(int n){
            int arr[] = new int[n];
            for(int i=0; i<n; i++){
                arr[i] = nextInt();
            }
            return arr;
        }
    }
} Main
import java.io.*;
import java.util.*;

public class Main {

    static List<Integer> al[];
    private  static void solver(InputReader sc, PrintWriter out) throws Exception {
        String s = sc.next();
        StringBuilder sb2 = new StringBuilder(s);
        String ans = sb2.reverse().toString();
        int n = s.length();
        int a  = n /2;
        int b = (n/2)+1;
        String x =s.substring(0, a);
        String y = s.substring(b,n);
        x = x.trim(); y = y.trim();
        if(a != n-b)
            throw new Exception();
        StringBuilder sb = new StringBuilder(x);
        StringBuilder sb1 = new StringBuilder(y);
        String z = sb.reverse().toString(); String z1  = sb1.reverse().toString();
        if(ans.equals(s) && x.equals(z) && y.equals(z1))
            out.println("Yes");
        else
            out.println("No");

    }

    public static void main(String[] args) throws Exception{
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        solver(in,out);
        out.close();
    }
    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }
        public long nextLong(){
            return Long.parseLong(next());
        }

        public long[] readLongArr(int n){
            long arr[] = new long[n];
            for(int i=0; i<n; i++){
                arr[i] = nextLong();
            }
            return arr;
        }
        public int[] readIntArr(int n){
            int arr[] = new int[n];
            for(int i=0; i<n; i++){
                arr[i] = nextInt();
            }
            return arr;
        }
    }
}
