import java.util.*;

public class Main {
	Scanner sc = new Scanner(System.in);
	final int MOD = 1000000007;
	final int MAX = Integer.MAX_VALUE;
	final long LMAX = Long.MAX_VALUE;
	int len = (int)1e6 + 1;

	void doIt() {
		String S = sc.next();
		int N = S.length();
		StringBuilder strb = new StringBuilder(S);
		strb.reverse();
		if(!S.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		String s = S.substring(0, (N - 1)/2);
		strb = new StringBuilder(s);
		strb.reverse();
		if(!s.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		s = S.substring((N + 3)/2 - 1);
		strb = new StringBuilder(s);
		strb.reverse();
		if(!s.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		System.out.println("Yes");
	}

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

} import java.util.*; util.* java public class Main {
	Scanner sc = new Scanner(System.in);
	final int MOD = 1000000007;
	final int MAX = Integer.MAX_VALUE;
	final long LMAX = Long.MAX_VALUE;
	int len = (int)1e6 + 1;

	void doIt() {
		String S = sc.next();
		int N = S.length();
		StringBuilder strb = new StringBuilder(S);
		strb.reverse();
		if(!S.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		String s = S.substring(0, (N - 1)/2);
		strb = new StringBuilder(s);
		strb.reverse();
		if(!s.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		s = S.substring((N + 3)/2 - 1);
		strb = new StringBuilder(s);
		strb.reverse();
		if(!s.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		System.out.println("Yes");
	}

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

} Main Scanner sc = new Scanner(System.in); sc new Scanner(System.in) final int MOD = 1000000007; MOD 1000000007 final int MAX = Integer.MAX_VALUE; MAX Integer.MAX_VALUE Integer Integer.MAX_VALUE final long LMAX = Long.MAX_VALUE; LMAX Long.MAX_VALUE Long Long.MAX_VALUE int len = (int)1e6 + 1; len (int)1e6 + 1 (int)1e6 1 void doIt() {
		String S = sc.next();
		int N = S.length();
		StringBuilder strb = new StringBuilder(S);
		strb.reverse();
		if(!S.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		String s = S.substring(0, (N - 1)/2);
		strb = new StringBuilder(s);
		strb.reverse();
		if(!s.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		s = S.substring((N + 3)/2 - 1);
		strb = new StringBuilder(s);
		strb.reverse();
		if(!s.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		System.out.println("Yes");
	} doIt {
		String S = sc.next();
		int N = S.length();
		StringBuilder strb = new StringBuilder(S);
		strb.reverse();
		if(!S.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		String s = S.substring(0, (N - 1)/2);
		strb = new StringBuilder(s);
		strb.reverse();
		if(!s.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		s = S.substring((N + 3)/2 - 1);
		strb = new StringBuilder(s);
		strb.reverse();
		if(!s.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		System.out.println("Yes");
	} String S = sc.next(); S sc.next() sc.next sc int N = S.length(); N S.length() S.length S StringBuilder strb = new StringBuilder(S); strb new StringBuilder(S) strb.reverse() strb.reverse strb if(!S.equals(strb.toString())) {
			System.out.println("No");
			return;
		} !S.equals(strb.toString()) S.equals(strb.toString()) S.equals S strb.toString() strb.toString strb {
			System.out.println("No");
			return;
		} System.out.println("No") System.out.println System.out System System.out "No" return; String s = S.substring(0, (N - 1)/2); s S.substring(0, (N - 1)/2) S.substring S 0 (N - 1)/2 (N - 1) N 1 2 strb = new StringBuilder(s) strb new StringBuilder(s) strb.reverse() strb.reverse strb if(!s.equals(strb.toString())) {
			System.out.println("No");
			return;
		} !s.equals(strb.toString()) s.equals(strb.toString()) s.equals s strb.toString() strb.toString strb {
			System.out.println("No");
			return;
		} System.out.println("No") System.out.println System.out System System.out "No" return; s = S.substring((N + 3)/2 - 1) s S.substring((N + 3)/2 - 1) S.substring S (N + 3)/2 - 1 (N + 3)/2 (N + 3) N 3 2 1 strb = new StringBuilder(s) strb new StringBuilder(s) strb.reverse() strb.reverse strb if(!s.equals(strb.toString())) {
			System.out.println("No");
			return;
		} !s.equals(strb.toString()) s.equals(strb.toString()) s.equals s strb.toString() strb.toString strb {
			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" public static void main(String[] args) {
		new Main().doIt();
	} main {
		new Main().doIt();
	} new Main().doIt() new Main().doIt new Main() String[] args args public class Main {
	Scanner sc = new Scanner(System.in);
	final int MOD = 1000000007;
	final int MAX = Integer.MAX_VALUE;
	final long LMAX = Long.MAX_VALUE;
	int len = (int)1e6 + 1;

	void doIt() {
		String S = sc.next();
		int N = S.length();
		StringBuilder strb = new StringBuilder(S);
		strb.reverse();
		if(!S.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		String s = S.substring(0, (N - 1)/2);
		strb = new StringBuilder(s);
		strb.reverse();
		if(!s.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		s = S.substring((N + 3)/2 - 1);
		strb = new StringBuilder(s);
		strb.reverse();
		if(!s.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		System.out.println("Yes");
	}

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

} public class Main {
	Scanner sc = new Scanner(System.in);
	final int MOD = 1000000007;
	final int MAX = Integer.MAX_VALUE;
	final long LMAX = Long.MAX_VALUE;
	int len = (int)1e6 + 1;

	void doIt() {
		String S = sc.next();
		int N = S.length();
		StringBuilder strb = new StringBuilder(S);
		strb.reverse();
		if(!S.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		String s = S.substring(0, (N - 1)/2);
		strb = new StringBuilder(s);
		strb.reverse();
		if(!s.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		s = S.substring((N + 3)/2 - 1);
		strb = new StringBuilder(s);
		strb.reverse();
		if(!s.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		System.out.println("Yes");
	}

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

} Main
import java.util.*;

public class Main {
	Scanner sc = new Scanner(System.in);
	final int MOD = 1000000007;
	final int MAX = Integer.MAX_VALUE;
	final long LMAX = Long.MAX_VALUE;
	int len = (int)1e6 + 1;

	void doIt() {
		String S = sc.next();
		int N = S.length();
		StringBuilder strb = new StringBuilder(S);
		strb.reverse();
		if(!S.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		String s = S.substring(0, (N - 1)/2);
		strb = new StringBuilder(s);
		strb.reverse();
		if(!s.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		s = S.substring((N + 3)/2 - 1);
		strb = new StringBuilder(s);
		strb.reverse();
		if(!s.equals(strb.toString())) {
			System.out.println("No");
			return;
		}
		System.out.println("Yes");
	}

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

}
