import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String s = br.readLine();
		String str[] = s.split("");

		if (kaibun(str)) {
			String s1[] = s.substring(0, (str.length - 1) / 2).split("");
			String s2[] = s.substring((str.length + 3) / 2 - 1, str.length).split("");
			if (kaibun(s1) && kaibun(s2)) {
				System.out.println("Yes");
			} else {
				System.out.println("No");
			}
		} else {
			System.out.println("No");
		}
	}

	static boolean kaibun(String str[]) {
		for (int i = 0; i < str.length; i++) {
			if (!str[i].equals(str[str.length - i - 1])) {
				return false;
			}
		}
		return true;
	}
} import java.io.BufferedReader; BufferedReader java.io import java.io.IOException; IOException java.io import java.io.InputStreamReader; InputStreamReader java.io import java.util.Arrays; Arrays java.util import java.util.HashMap; HashMap java.util import java.util.Map; Map java.util public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String s = br.readLine();
		String str[] = s.split("");

		if (kaibun(str)) {
			String s1[] = s.substring(0, (str.length - 1) / 2).split("");
			String s2[] = s.substring((str.length + 3) / 2 - 1, str.length).split("");
			if (kaibun(s1) && kaibun(s2)) {
				System.out.println("Yes");
			} else {
				System.out.println("No");
			}
		} else {
			System.out.println("No");
		}
	}

	static boolean kaibun(String str[]) {
		for (int i = 0; i < str.length; i++) {
			if (!str[i].equals(str[str.length - i - 1])) {
				return false;
			}
		}
		return true;
	}
} Main public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String s = br.readLine();
		String str[] = s.split("");

		if (kaibun(str)) {
			String s1[] = s.substring(0, (str.length - 1) / 2).split("");
			String s2[] = s.substring((str.length + 3) / 2 - 1, str.length).split("");
			if (kaibun(s1) && kaibun(s2)) {
				System.out.println("Yes");
			} else {
				System.out.println("No");
			}
		} else {
			System.out.println("No");
		}
	} main {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String s = br.readLine();
		String str[] = s.split("");

		if (kaibun(str)) {
			String s1[] = s.substring(0, (str.length - 1) / 2).split("");
			String s2[] = s.substring((str.length + 3) / 2 - 1, str.length).split("");
			if (kaibun(s1) && kaibun(s2)) {
				System.out.println("Yes");
			} else {
				System.out.println("No");
			}
		} else {
			System.out.println("No");
		}
	} BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); br new BufferedReader(new InputStreamReader(System.in)) String s = br.readLine(); s br.readLine() br.readLine br String str[] = s.split(""); str s.split("") s.split s "" if (kaibun(str)) {
			String s1[] = s.substring(0, (str.length - 1) / 2).split("");
			String s2[] = s.substring((str.length + 3) / 2 - 1, str.length).split("");
			if (kaibun(s1) && kaibun(s2)) {
				System.out.println("Yes");
			} else {
				System.out.println("No");
			}
		} else {
			System.out.println("No");
		} kaibun(str) kaibun str {
			String s1[] = s.substring(0, (str.length - 1) / 2).split("");
			String s2[] = s.substring((str.length + 3) / 2 - 1, str.length).split("");
			if (kaibun(s1) && kaibun(s2)) {
				System.out.println("Yes");
			} else {
				System.out.println("No");
			}
		} String s1[] = s.substring(0, (str.length - 1) / 2).split(""); s1 s.substring(0, (str.length - 1) / 2).split("") s.substring(0, (str.length - 1) / 2).split s.substring(0, (str.length - 1) / 2) s.substring s 0 (str.length - 1) / 2 (str.length - 1) str.length str str.length 1 2 "" String s2[] = s.substring((str.length + 3) / 2 - 1, str.length).split(""); s2 s.substring((str.length + 3) / 2 - 1, str.length).split("") s.substring((str.length + 3) / 2 - 1, str.length).split s.substring((str.length + 3) / 2 - 1, str.length) s.substring s (str.length + 3) / 2 - 1 (str.length + 3) / 2 (str.length + 3) str.length str str.length 3 2 1 str.length str str.length "" if (kaibun(s1) && kaibun(s2)) {
				System.out.println("Yes");
			} else {
				System.out.println("No");
			} kaibun(s1) && kaibun(s2) kaibun(s1) kaibun s1 kaibun(s2) kaibun s2 {
				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" {
			System.out.println("No");
		} System.out.println("No") System.out.println System.out System System.out "No" String[] args args static boolean kaibun(String str[]) {
		for (int i = 0; i < str.length; i++) {
			if (!str[i].equals(str[str.length - i - 1])) {
				return false;
			}
		}
		return true;
	} kaibun {
		for (int i = 0; i < str.length; i++) {
			if (!str[i].equals(str[str.length - i - 1])) {
				return false;
			}
		}
		return true;
	} for (int i = 0; i < str.length; i++) {
			if (!str[i].equals(str[str.length - i - 1])) {
				return false;
			}
		} int i = 0; int i = 0; i 0 i < str.length i str.length str str.length i++ i++ i {
			if (!str[i].equals(str[str.length - i - 1])) {
				return false;
			}
		} {
			if (!str[i].equals(str[str.length - i - 1])) {
				return false;
			}
		} if (!str[i].equals(str[str.length - i - 1])) {
				return false;
			} !str[i].equals(str[str.length - i - 1]) str[i].equals(str[str.length - i - 1]) str[i].equals str[i] str i str[str.length - i - 1] str str.length - i - 1 str.length - i - 1 str.length str str.length i 1 {
				return false;
			} return false; false return true; true String str[] str public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String s = br.readLine();
		String str[] = s.split("");

		if (kaibun(str)) {
			String s1[] = s.substring(0, (str.length - 1) / 2).split("");
			String s2[] = s.substring((str.length + 3) / 2 - 1, str.length).split("");
			if (kaibun(s1) && kaibun(s2)) {
				System.out.println("Yes");
			} else {
				System.out.println("No");
			}
		} else {
			System.out.println("No");
		}
	}

	static boolean kaibun(String str[]) {
		for (int i = 0; i < str.length; i++) {
			if (!str[i].equals(str[str.length - i - 1])) {
				return false;
			}
		}
		return true;
	}
} public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String s = br.readLine();
		String str[] = s.split("");

		if (kaibun(str)) {
			String s1[] = s.substring(0, (str.length - 1) / 2).split("");
			String s2[] = s.substring((str.length + 3) / 2 - 1, str.length).split("");
			if (kaibun(s1) && kaibun(s2)) {
				System.out.println("Yes");
			} else {
				System.out.println("No");
			}
		} else {
			System.out.println("No");
		}
	}

	static boolean kaibun(String str[]) {
		for (int i = 0; i < str.length; i++) {
			if (!str[i].equals(str[str.length - i - 1])) {
				return false;
			}
		}
		return true;
	}
} Main
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String s = br.readLine();
		String str[] = s.split("");

		if (kaibun(str)) {
			String s1[] = s.substring(0, (str.length - 1) / 2).split("");
			String s2[] = s.substring((str.length + 3) / 2 - 1, str.length).split("");
			if (kaibun(s1) && kaibun(s2)) {
				System.out.println("Yes");
			} else {
				System.out.println("No");
			}
		} else {
			System.out.println("No");
		}
	}

	static boolean kaibun(String str[]) {
		for (int i = 0; i < str.length; i++) {
			if (!str[i].equals(str[str.length - i - 1])) {
				return false;
			}
		}
		return true;
	}
}