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

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
		String s = in.next();
		String r = solve(s);
		System.out.println(r);
		in.close();
	}

	private static String solve(String s) {
		if (isRotate(s) && isRotate(s.substring(0, s.length() / 2)))
			return ("Yes");
		else
			return ("No");
	}

	private static boolean isRotate(String s) {
		for (int i = 0; i < s.length() / 2; i++)
			if (s.charAt(i) != s.charAt(s.length() - 1 - i))
				return false;
		return true;
	}
} 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) {
		Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
		String s = in.next();
		String r = solve(s);
		System.out.println(r);
		in.close();
	}

	private static String solve(String s) {
		if (isRotate(s) && isRotate(s.substring(0, s.length() / 2)))
			return ("Yes");
		else
			return ("No");
	}

	private static boolean isRotate(String s) {
		for (int i = 0; i < s.length() / 2; i++)
			if (s.charAt(i) != s.charAt(s.length() - 1 - i))
				return false;
		return true;
	}
} Main public static void main(String[] args) {
		Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
		String s = in.next();
		String r = solve(s);
		System.out.println(r);
		in.close();
	} main {
		Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
		String s = in.next();
		String r = solve(s);
		System.out.println(r);
		in.close();
	} Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in))); in new Scanner(new BufferedReader(new InputStreamReader(System.in))) String s = in.next(); s in.next() in.next in String r = solve(s); r solve(s) solve s System.out.println(r) System.out.println System.out System System.out r in.close() in.close in String[] args args private static String solve(String s) {
		if (isRotate(s) && isRotate(s.substring(0, s.length() / 2)))
			return ("Yes");
		else
			return ("No");
	} solve {
		if (isRotate(s) && isRotate(s.substring(0, s.length() / 2)))
			return ("Yes");
		else
			return ("No");
	} if (isRotate(s) && isRotate(s.substring(0, s.length() / 2)))
			return ("Yes");
		else
			return ("No"); isRotate(s) && isRotate(s.substring(0, s.length() / 2)) isRotate(s) isRotate s isRotate(s.substring(0, s.length() / 2)) isRotate s.substring(0, s.length() / 2) s.substring s 0 s.length() / 2 s.length() s.length s 2 return ("Yes"); ("Yes") return ("No"); ("No") String s s private static boolean isRotate(String s) {
		for (int i = 0; i < s.length() / 2; i++)
			if (s.charAt(i) != s.charAt(s.length() - 1 - i))
				return false;
		return true;
	} isRotate {
		for (int i = 0; i < s.length() / 2; i++)
			if (s.charAt(i) != s.charAt(s.length() - 1 - i))
				return false;
		return true;
	} for (int i = 0; i < s.length() / 2; i++)
			if (s.charAt(i) != s.charAt(s.length() - 1 - i))
				return false; int i = 0; int i = 0; i 0 i < s.length() / 2 i s.length() / 2 s.length() s.length s 2 i++ i++ i if (s.charAt(i) != s.charAt(s.length() - 1 - i))
				return false; if (s.charAt(i) != s.charAt(s.length() - 1 - i))
				return false; s.charAt(i) != s.charAt(s.length() - 1 - i) s.charAt(i) s.charAt s i s.charAt(s.length() - 1 - i) s.charAt s s.length() - 1 - i s.length() - 1 - i s.length() s.length s 1 i return false; false return true; true String s s public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
		String s = in.next();
		String r = solve(s);
		System.out.println(r);
		in.close();
	}

	private static String solve(String s) {
		if (isRotate(s) && isRotate(s.substring(0, s.length() / 2)))
			return ("Yes");
		else
			return ("No");
	}

	private static boolean isRotate(String s) {
		for (int i = 0; i < s.length() / 2; i++)
			if (s.charAt(i) != s.charAt(s.length() - 1 - i))
				return false;
		return true;
	}
} public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
		String s = in.next();
		String r = solve(s);
		System.out.println(r);
		in.close();
	}

	private static String solve(String s) {
		if (isRotate(s) && isRotate(s.substring(0, s.length() / 2)))
			return ("Yes");
		else
			return ("No");
	}

	private static boolean isRotate(String s) {
		for (int i = 0; i < s.length() / 2; i++)
			if (s.charAt(i) != s.charAt(s.length() - 1 - i))
				return false;
		return true;
	}
} Main
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
		String s = in.next();
		String r = solve(s);
		System.out.println(r);
		in.close();
	}

	private static String solve(String s) {
		if (isRotate(s) && isRotate(s.substring(0, s.length() / 2)))
			return ("Yes");
		else
			return ("No");
	}

	private static boolean isRotate(String s) {
		for (int i = 0; i < s.length() / 2; i++)
			if (s.charAt(i) != s.charAt(s.length() - 1 - i))
				return false;
		return true;
	}
}