import java.util.Scanner;

public class Main {
	public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        Main m = new Main(sc);
        m.show(m.solve());
        sc.close();
    }
    
	//フィールド
    Scanner sc;
    String S;
    
    //入力
    Main(Scanner sc) {
        this.sc = sc;
        S = sc.next();
    }
    
    //解答処理
    private boolean solve() {
    	boolean judge = false;
    	int N = S.length();
      
    	if (Palindrome(S.substring(0, N/2)) && Palindrome(S.substring(N/2+1, N)) && Palindrome(S)) {
    		judge = true;
    	}
         
        return judge;
    }
    
    private boolean Palindrome(String str) {	//回文か判定するメソッド
    	boolean kaibun = false;
    	StringBuilder reverses = new StringBuilder(str).reverse();
    	String reverseS = reverses.toString();
    	
    	if (str.equals(reverseS)) {
    		kaibun = true;
    	}
    	
    	return kaibun;
    }
    
    //出力
    public void show(boolean answer) {
        if (answer) {
        	System.out.println("Yes");
        } else {
        	System.out.println("No");
        }
    }

} import java.util.Scanner; Scanner java.util public class Main {
	public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        Main m = new Main(sc);
        m.show(m.solve());
        sc.close();
    }
    
	//フィールド
    Scanner sc;
    String S;
    
    //入力
    Main(Scanner sc) {
        this.sc = sc;
        S = sc.next();
    }
    
    //解答処理
    private boolean solve() {
    	boolean judge = false;
    	int N = S.length();
      
    	if (Palindrome(S.substring(0, N/2)) && Palindrome(S.substring(N/2+1, N)) && Palindrome(S)) {
    		judge = true;
    	}
         
        return judge;
    }
    
    private boolean Palindrome(String str) {	//回文か判定するメソッド
    	boolean kaibun = false;
    	StringBuilder reverses = new StringBuilder(str).reverse();
    	String reverseS = reverses.toString();
    	
    	if (str.equals(reverseS)) {
    		kaibun = true;
    	}
    	
    	return kaibun;
    }
    
    //出力
    public void show(boolean answer) {
        if (answer) {
        	System.out.println("Yes");
        } else {
        	System.out.println("No");
        }
    }

} Main //フィールド
    Scanner sc; sc String S; S public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        Main m = new Main(sc);
        m.show(m.solve());
        sc.close();
    } main {
        Scanner sc = new Scanner(System.in);
        Main m = new Main(sc);
        m.show(m.solve());
        sc.close();
    } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) Main m = new Main(sc); m new Main(sc) m.show(m.solve()) m.show m m.solve() m.solve m sc.close() sc.close sc String[] args args //入力
    Main(Scanner sc) {
        this.sc = sc;
        S = sc.next();
    } Main {
        this.sc = sc;
        S = sc.next();
    } this.sc = sc this.sc this this.sc sc S = sc.next() S sc.next() sc.next sc Scanner sc sc //解答処理
    private boolean solve() {
    	boolean judge = false;
    	int N = S.length();
      
    	if (Palindrome(S.substring(0, N/2)) && Palindrome(S.substring(N/2+1, N)) && Palindrome(S)) {
    		judge = true;
    	}
         
        return judge;
    } solve {
    	boolean judge = false;
    	int N = S.length();
      
    	if (Palindrome(S.substring(0, N/2)) && Palindrome(S.substring(N/2+1, N)) && Palindrome(S)) {
    		judge = true;
    	}
         
        return judge;
    } boolean judge = false; judge false int N = S.length(); N S.length() S.length S if (Palindrome(S.substring(0, N/2)) && Palindrome(S.substring(N/2+1, N)) && Palindrome(S)) {
    		judge = true;
    	} Palindrome(S.substring(0, N/2)) && Palindrome(S.substring(N/2+1, N)) && Palindrome(S) Palindrome(S.substring(0, N/2)) && Palindrome(S.substring(N/2+1, N)) && Palindrome(S) Palindrome(S.substring(0, N/2)) Palindrome S.substring(0, N/2) S.substring S 0 N/2 N 2 Palindrome(S.substring(N/2+1, N)) Palindrome S.substring(N/2+1, N) S.substring S N/2+1 N/2 N 2 1 N Palindrome(S) Palindrome S {
    		judge = true;
    	} judge = true judge true return judge; judge private boolean Palindrome(String str) {	//回文か判定するメソッド
    	boolean kaibun = false;
    	StringBuilder reverses = new StringBuilder(str).reverse();
    	String reverseS = reverses.toString();
    	
    	if (str.equals(reverseS)) {
    		kaibun = true;
    	}
    	
    	return kaibun;
    } Palindrome {	//回文か判定するメソッド
    	boolean kaibun = false;
    	StringBuilder reverses = new StringBuilder(str).reverse();
    	String reverseS = reverses.toString();
    	
    	if (str.equals(reverseS)) {
    		kaibun = true;
    	}
    	
    	return kaibun;
    } boolean kaibun = false; kaibun false StringBuilder reverses = new StringBuilder(str).reverse(); reverses new StringBuilder(str).reverse() new StringBuilder(str).reverse new StringBuilder(str) String reverseS = reverses.toString(); reverseS reverses.toString() reverses.toString reverses if (str.equals(reverseS)) {
    		kaibun = true;
    	} str.equals(reverseS) str.equals str reverseS {
    		kaibun = true;
    	} kaibun = true kaibun true return kaibun; kaibun String str str //出力
    public void show(boolean answer) {
        if (answer) {
        	System.out.println("Yes");
        } else {
        	System.out.println("No");
        }
    } show {
        if (answer) {
        	System.out.println("Yes");
        } else {
        	System.out.println("No");
        }
    } if (answer) {
        	System.out.println("Yes");
        } else {
        	System.out.println("No");
        } answer {
        	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" boolean answer answer public class Main {
	public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        Main m = new Main(sc);
        m.show(m.solve());
        sc.close();
    }
    
	//フィールド
    Scanner sc;
    String S;
    
    //入力
    Main(Scanner sc) {
        this.sc = sc;
        S = sc.next();
    }
    
    //解答処理
    private boolean solve() {
    	boolean judge = false;
    	int N = S.length();
      
    	if (Palindrome(S.substring(0, N/2)) && Palindrome(S.substring(N/2+1, N)) && Palindrome(S)) {
    		judge = true;
    	}
         
        return judge;
    }
    
    private boolean Palindrome(String str) {	//回文か判定するメソッド
    	boolean kaibun = false;
    	StringBuilder reverses = new StringBuilder(str).reverse();
    	String reverseS = reverses.toString();
    	
    	if (str.equals(reverseS)) {
    		kaibun = true;
    	}
    	
    	return kaibun;
    }
    
    //出力
    public void show(boolean answer) {
        if (answer) {
        	System.out.println("Yes");
        } else {
        	System.out.println("No");
        }
    }

} public class Main {
	public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        Main m = new Main(sc);
        m.show(m.solve());
        sc.close();
    }
    
	//フィールド
    Scanner sc;
    String S;
    
    //入力
    Main(Scanner sc) {
        this.sc = sc;
        S = sc.next();
    }
    
    //解答処理
    private boolean solve() {
    	boolean judge = false;
    	int N = S.length();
      
    	if (Palindrome(S.substring(0, N/2)) && Palindrome(S.substring(N/2+1, N)) && Palindrome(S)) {
    		judge = true;
    	}
         
        return judge;
    }
    
    private boolean Palindrome(String str) {	//回文か判定するメソッド
    	boolean kaibun = false;
    	StringBuilder reverses = new StringBuilder(str).reverse();
    	String reverseS = reverses.toString();
    	
    	if (str.equals(reverseS)) {
    		kaibun = true;
    	}
    	
    	return kaibun;
    }
    
    //出力
    public void show(boolean answer) {
        if (answer) {
        	System.out.println("Yes");
        } else {
        	System.out.println("No");
        }
    }

} Main
import java.util.Scanner;

public class Main {
	public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        Main m = new Main(sc);
        m.show(m.solve());
        sc.close();
    }
    
	//フィールド
    Scanner sc;
    String S;
    
    //入力
    Main(Scanner sc) {
        this.sc = sc;
        S = sc.next();
    }
    
    //解答処理
    private boolean solve() {
    	boolean judge = false;
    	int N = S.length();
      
    	if (Palindrome(S.substring(0, N/2)) && Palindrome(S.substring(N/2+1, N)) && Palindrome(S)) {
    		judge = true;
    	}
         
        return judge;
    }
    
    private boolean Palindrome(String str) {	//回文か判定するメソッド
    	boolean kaibun = false;
    	StringBuilder reverses = new StringBuilder(str).reverse();
    	String reverseS = reverses.toString();
    	
    	if (str.equals(reverseS)) {
    		kaibun = true;
    	}
    	
    	return kaibun;
    }
    
    //出力
    public void show(boolean answer) {
        if (answer) {
        	System.out.println("Yes");
        } else {
        	System.out.println("No");
        }
    }

}
