import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		char[] S = sc.next().toCharArray();
		sc.close();
		boolean ok = true;
		int N = S.length;
		// Sは回文であるか
		for(int i = 0; i < N; i++) {
			ok &= S[i] == S[N - i - 1];
		}
		// Sの1文字目から(N - 1)/2文字目まで(両端含む)からなる文字は回文であるか
		for(int i = 0; i < (N - 1) / 2; i++) {
			ok &= S[i] == S[(N - 1) / 2 - i - 1];
		}
		// Sの(N + 3)/2文字目からN文字目まで(両端含む)からなる文字は回文であるか
		// ※Sが回分であることが条件のため、Sの(N + 3)/2文字目移行の文字と1文字目～からが回分であればOK
		for(int i = (N + 3) / 2 - 1; i < N; i++) {
			ok &= S[i] == S[N - i - 1];
		}
		System.out.println(ok ? "Yes" : "No");
	}
} import java.util.Scanner; Scanner java.util public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		char[] S = sc.next().toCharArray();
		sc.close();
		boolean ok = true;
		int N = S.length;
		// Sは回文であるか
		for(int i = 0; i < N; i++) {
			ok &= S[i] == S[N - i - 1];
		}
		// Sの1文字目から(N - 1)/2文字目まで(両端含む)からなる文字は回文であるか
		for(int i = 0; i < (N - 1) / 2; i++) {
			ok &= S[i] == S[(N - 1) / 2 - i - 1];
		}
		// Sの(N + 3)/2文字目からN文字目まで(両端含む)からなる文字は回文であるか
		// ※Sが回分であることが条件のため、Sの(N + 3)/2文字目移行の文字と1文字目～からが回分であればOK
		for(int i = (N + 3) / 2 - 1; i < N; i++) {
			ok &= S[i] == S[N - i - 1];
		}
		System.out.println(ok ? "Yes" : "No");
	}
} Main public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		char[] S = sc.next().toCharArray();
		sc.close();
		boolean ok = true;
		int N = S.length;
		// Sは回文であるか
		for(int i = 0; i < N; i++) {
			ok &= S[i] == S[N - i - 1];
		}
		// Sの1文字目から(N - 1)/2文字目まで(両端含む)からなる文字は回文であるか
		for(int i = 0; i < (N - 1) / 2; i++) {
			ok &= S[i] == S[(N - 1) / 2 - i - 1];
		}
		// Sの(N + 3)/2文字目からN文字目まで(両端含む)からなる文字は回文であるか
		// ※Sが回分であることが条件のため、Sの(N + 3)/2文字目移行の文字と1文字目～からが回分であればOK
		for(int i = (N + 3) / 2 - 1; i < N; i++) {
			ok &= S[i] == S[N - i - 1];
		}
		System.out.println(ok ? "Yes" : "No");
	} main {
		Scanner sc = new Scanner(System.in);
		char[] S = sc.next().toCharArray();
		sc.close();
		boolean ok = true;
		int N = S.length;
		// Sは回文であるか
		for(int i = 0; i < N; i++) {
			ok &= S[i] == S[N - i - 1];
		}
		// Sの1文字目から(N - 1)/2文字目まで(両端含む)からなる文字は回文であるか
		for(int i = 0; i < (N - 1) / 2; i++) {
			ok &= S[i] == S[(N - 1) / 2 - i - 1];
		}
		// Sの(N + 3)/2文字目からN文字目まで(両端含む)からなる文字は回文であるか
		// ※Sが回分であることが条件のため、Sの(N + 3)/2文字目移行の文字と1文字目～からが回分であればOK
		for(int i = (N + 3) / 2 - 1; i < N; i++) {
			ok &= S[i] == S[N - i - 1];
		}
		System.out.println(ok ? "Yes" : "No");
	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) char[] S = sc.next().toCharArray(); S sc.next().toCharArray() sc.next().toCharArray sc.next() sc.next sc sc.close() sc.close sc boolean ok = true; ok true int N = S.length; N S.length S S.length for(int i = 0; i < N; i++) {
			ok &= S[i] == S[N - i - 1];
		} int i = 0; int i = 0; i 0 i < N i N i++ i++ i {
			ok &= S[i] == S[N - i - 1];
		} {
			ok &= S[i] == S[N - i - 1];
		} ok &= S[i] == S[N - i - 1] ok S[i] == S[N - i - 1] S[i] S i S[N - i - 1] S N - i - 1 N - i - 1 N i 1 for(int i = 0; i < (N - 1) / 2; i++) {
			ok &= S[i] == S[(N - 1) / 2 - i - 1];
		} int i = 0; int i = 0; i 0 i < (N - 1) / 2 i (N - 1) / 2 (N - 1) N 1 2 i++ i++ i {
			ok &= S[i] == S[(N - 1) / 2 - i - 1];
		} {
			ok &= S[i] == S[(N - 1) / 2 - i - 1];
		} ok &= S[i] == S[(N - 1) / 2 - i - 1] ok S[i] == S[(N - 1) / 2 - i - 1] S[i] S i S[(N - 1) / 2 - i - 1] S (N - 1) / 2 - i - 1 (N - 1) / 2 - i - 1 (N - 1) / 2 (N - 1) N 1 2 i 1 for(int i = (N + 3) / 2 - 1; i < N; i++) {
			ok &= S[i] == S[N - i - 1];
		} int i = (N + 3) / 2 - 1; int i = (N + 3) / 2 - 1; i (N + 3) / 2 - 1 (N + 3) / 2 (N + 3) N 3 2 1 i < N i N i++ i++ i {
			ok &= S[i] == S[N - i - 1];
		} {
			ok &= S[i] == S[N - i - 1];
		} ok &= S[i] == S[N - i - 1] ok S[i] == S[N - i - 1] S[i] S i S[N - i - 1] S N - i - 1 N - i - 1 N i 1 System.out.println(ok ? "Yes" : "No") System.out.println System.out System System.out ok ? "Yes" : "No" ok "Yes" "No" String[] args args public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		char[] S = sc.next().toCharArray();
		sc.close();
		boolean ok = true;
		int N = S.length;
		// Sは回文であるか
		for(int i = 0; i < N; i++) {
			ok &= S[i] == S[N - i - 1];
		}
		// Sの1文字目から(N - 1)/2文字目まで(両端含む)からなる文字は回文であるか
		for(int i = 0; i < (N - 1) / 2; i++) {
			ok &= S[i] == S[(N - 1) / 2 - i - 1];
		}
		// Sの(N + 3)/2文字目からN文字目まで(両端含む)からなる文字は回文であるか
		// ※Sが回分であることが条件のため、Sの(N + 3)/2文字目移行の文字と1文字目～からが回分であればOK
		for(int i = (N + 3) / 2 - 1; i < N; i++) {
			ok &= S[i] == S[N - i - 1];
		}
		System.out.println(ok ? "Yes" : "No");
	}
} public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		char[] S = sc.next().toCharArray();
		sc.close();
		boolean ok = true;
		int N = S.length;
		// Sは回文であるか
		for(int i = 0; i < N; i++) {
			ok &= S[i] == S[N - i - 1];
		}
		// Sの1文字目から(N - 1)/2文字目まで(両端含む)からなる文字は回文であるか
		for(int i = 0; i < (N - 1) / 2; i++) {
			ok &= S[i] == S[(N - 1) / 2 - i - 1];
		}
		// Sの(N + 3)/2文字目からN文字目まで(両端含む)からなる文字は回文であるか
		// ※Sが回分であることが条件のため、Sの(N + 3)/2文字目移行の文字と1文字目～からが回分であればOK
		for(int i = (N + 3) / 2 - 1; i < N; i++) {
			ok &= S[i] == S[N - i - 1];
		}
		System.out.println(ok ? "Yes" : "No");
	}
} Main
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		char[] S = sc.next().toCharArray();
		sc.close();
		boolean ok = true;
		int N = S.length;
		// Sは回文であるか
		for(int i = 0; i < N; i++) {
			ok &= S[i] == S[N - i - 1];
		}
		// Sの1文字目から(N - 1)/2文字目まで(両端含む)からなる文字は回文であるか
		for(int i = 0; i < (N - 1) / 2; i++) {
			ok &= S[i] == S[(N - 1) / 2 - i - 1];
		}
		// Sの(N + 3)/2文字目からN文字目まで(両端含む)からなる文字は回文であるか
		// ※Sが回分であることが条件のため、Sの(N + 3)/2文字目移行の文字と1文字目～からが回分であればOK
		for(int i = (N + 3) / 2 - 1; i < N; i++) {
			ok &= S[i] == S[N - i - 1];
		}
		System.out.println(ok ? "Yes" : "No");
	}
}