import java.util.*;
import java.io.*;
public class Main {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
	static StringTokenizer st;
	public static void main(String[] args) throws IOException {
		String s = readLine();
      	boolean p = true;
      	int n = s.length();
      	for(int i = 0; i<n; i++){
          	if(s.charAt(i)!=s.charAt(n-i-1))p = false;
        }
      	int n2 = (n-1)/2;
      	for(int i = 0; i<n2; i++)
          	if(s.charAt(i)!=s.charAt(n2-i-1))p = false;
      	int n3 = (n+3)/2 - 1;
      	for(int i = n3; i<n; i++)
          	if(s.charAt(i)!=s.charAt(n-(i-n3)-1))p = false;
      	if(p)System.out.println("Yes");
      	else System.out.println("No");
	}
	static String next () throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine().trim());
		return st.nextToken();
	}
	static long readLong () throws IOException {
		return Long.parseLong(next());
	}
	static int readInt () throws IOException {
		return Integer.parseInt(next());
	}
	static double readDouble () throws IOException {
		return Double.parseDouble(next());
	}
	static char readCharacter () throws IOException {
		return next().charAt(0);
	}
	static String readLine () throws IOException {
		return br.readLine().trim();
	}
} import java.util.*; util.* java import java.io.*; io.* java public class Main {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
	static StringTokenizer st;
	public static void main(String[] args) throws IOException {
		String s = readLine();
      	boolean p = true;
      	int n = s.length();
      	for(int i = 0; i<n; i++){
          	if(s.charAt(i)!=s.charAt(n-i-1))p = false;
        }
      	int n2 = (n-1)/2;
      	for(int i = 0; i<n2; i++)
          	if(s.charAt(i)!=s.charAt(n2-i-1))p = false;
      	int n3 = (n+3)/2 - 1;
      	for(int i = n3; i<n; i++)
          	if(s.charAt(i)!=s.charAt(n-(i-n3)-1))p = false;
      	if(p)System.out.println("Yes");
      	else System.out.println("No");
	}
	static String next () throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine().trim());
		return st.nextToken();
	}
	static long readLong () throws IOException {
		return Long.parseLong(next());
	}
	static int readInt () throws IOException {
		return Integer.parseInt(next());
	}
	static double readDouble () throws IOException {
		return Double.parseDouble(next());
	}
	static char readCharacter () throws IOException {
		return next().charAt(0);
	}
	static String readLine () throws IOException {
		return br.readLine().trim();
	}
} Main static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); br new BufferedReader(new InputStreamReader(System.in)) static PrintWriter pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))); pr new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))) static StringTokenizer st; st public static void main(String[] args) throws IOException {
		String s = readLine();
      	boolean p = true;
      	int n = s.length();
      	for(int i = 0; i<n; i++){
          	if(s.charAt(i)!=s.charAt(n-i-1))p = false;
        }
      	int n2 = (n-1)/2;
      	for(int i = 0; i<n2; i++)
          	if(s.charAt(i)!=s.charAt(n2-i-1))p = false;
      	int n3 = (n+3)/2 - 1;
      	for(int i = n3; i<n; i++)
          	if(s.charAt(i)!=s.charAt(n-(i-n3)-1))p = false;
      	if(p)System.out.println("Yes");
      	else System.out.println("No");
	} main {
		String s = readLine();
      	boolean p = true;
      	int n = s.length();
      	for(int i = 0; i<n; i++){
          	if(s.charAt(i)!=s.charAt(n-i-1))p = false;
        }
      	int n2 = (n-1)/2;
      	for(int i = 0; i<n2; i++)
          	if(s.charAt(i)!=s.charAt(n2-i-1))p = false;
      	int n3 = (n+3)/2 - 1;
      	for(int i = n3; i<n; i++)
          	if(s.charAt(i)!=s.charAt(n-(i-n3)-1))p = false;
      	if(p)System.out.println("Yes");
      	else System.out.println("No");
	} String s = readLine(); s readLine() readLine boolean p = true; p true int n = s.length(); n s.length() s.length s for(int i = 0; i<n; i++){
          	if(s.charAt(i)!=s.charAt(n-i-1))p = false;
        } int i = 0; int i = 0; i 0 i<n i n i++ i++ i {
          	if(s.charAt(i)!=s.charAt(n-i-1))p = false;
        } {
          	if(s.charAt(i)!=s.charAt(n-i-1))p = false;
        } if(s.charAt(i)!=s.charAt(n-i-1))p = false; s.charAt(i)!=s.charAt(n-i-1) s.charAt(i) s.charAt s i s.charAt(n-i-1) s.charAt s n-i-1 n-i-1 n i 1 p = false p false int n2 = (n-1)/2; n2 (n-1)/2 (n-1) n 1 2 for(int i = 0; i<n2; i++)
          	if(s.charAt(i)!=s.charAt(n2-i-1))p = false; int i = 0; int i = 0; i 0 i<n2 i n2 i++ i++ i if(s.charAt(i)!=s.charAt(n2-i-1))p = false; if(s.charAt(i)!=s.charAt(n2-i-1))p = false; s.charAt(i)!=s.charAt(n2-i-1) s.charAt(i) s.charAt s i s.charAt(n2-i-1) s.charAt s n2-i-1 n2-i-1 n2 i 1 p = false p false int n3 = (n+3)/2 - 1; n3 (n+3)/2 - 1 (n+3)/2 (n+3) n 3 2 1 for(int i = n3; i<n; i++)
          	if(s.charAt(i)!=s.charAt(n-(i-n3)-1))p = false; int i = n3; int i = n3; i n3 i<n i n i++ i++ i if(s.charAt(i)!=s.charAt(n-(i-n3)-1))p = false; if(s.charAt(i)!=s.charAt(n-(i-n3)-1))p = false; s.charAt(i)!=s.charAt(n-(i-n3)-1) s.charAt(i) s.charAt s i s.charAt(n-(i-n3)-1) s.charAt s n-(i-n3)-1 n-(i-n3)-1 n (i-n3) i n3 1 p = false p false if(p)System.out.println("Yes");
      	else System.out.println("No"); p System.out.println("Yes") System.out.println System.out System System.out "Yes" System.out.println("No") System.out.println System.out System System.out "No" String[] args args static String next () throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine().trim());
		return st.nextToken();
	} next {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine().trim());
		return st.nextToken();
	} while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine().trim()); st == null || !st.hasMoreTokens() st == null st null !st.hasMoreTokens() st.hasMoreTokens() st.hasMoreTokens st st = new StringTokenizer(br.readLine().trim()) st new StringTokenizer(br.readLine().trim()) return st.nextToken(); st.nextToken() st.nextToken st static long readLong () throws IOException {
		return Long.parseLong(next());
	} readLong {
		return Long.parseLong(next());
	} return Long.parseLong(next()); Long.parseLong(next()) Long.parseLong Long next() next static int readInt () throws IOException {
		return Integer.parseInt(next());
	} readInt {
		return Integer.parseInt(next());
	} return Integer.parseInt(next()); Integer.parseInt(next()) Integer.parseInt Integer next() next static double readDouble () throws IOException {
		return Double.parseDouble(next());
	} readDouble {
		return Double.parseDouble(next());
	} return Double.parseDouble(next()); Double.parseDouble(next()) Double.parseDouble Double next() next static char readCharacter () throws IOException {
		return next().charAt(0);
	} readCharacter {
		return next().charAt(0);
	} return next().charAt(0); next().charAt(0) next().charAt next() next 0 static String readLine () throws IOException {
		return br.readLine().trim();
	} readLine {
		return br.readLine().trim();
	} return br.readLine().trim(); br.readLine().trim() br.readLine().trim br.readLine() br.readLine br public class Main {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
	static StringTokenizer st;
	public static void main(String[] args) throws IOException {
		String s = readLine();
      	boolean p = true;
      	int n = s.length();
      	for(int i = 0; i<n; i++){
          	if(s.charAt(i)!=s.charAt(n-i-1))p = false;
        }
      	int n2 = (n-1)/2;
      	for(int i = 0; i<n2; i++)
          	if(s.charAt(i)!=s.charAt(n2-i-1))p = false;
      	int n3 = (n+3)/2 - 1;
      	for(int i = n3; i<n; i++)
          	if(s.charAt(i)!=s.charAt(n-(i-n3)-1))p = false;
      	if(p)System.out.println("Yes");
      	else System.out.println("No");
	}
	static String next () throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine().trim());
		return st.nextToken();
	}
	static long readLong () throws IOException {
		return Long.parseLong(next());
	}
	static int readInt () throws IOException {
		return Integer.parseInt(next());
	}
	static double readDouble () throws IOException {
		return Double.parseDouble(next());
	}
	static char readCharacter () throws IOException {
		return next().charAt(0);
	}
	static String readLine () throws IOException {
		return br.readLine().trim();
	}
} public class Main {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
	static StringTokenizer st;
	public static void main(String[] args) throws IOException {
		String s = readLine();
      	boolean p = true;
      	int n = s.length();
      	for(int i = 0; i<n; i++){
          	if(s.charAt(i)!=s.charAt(n-i-1))p = false;
        }
      	int n2 = (n-1)/2;
      	for(int i = 0; i<n2; i++)
          	if(s.charAt(i)!=s.charAt(n2-i-1))p = false;
      	int n3 = (n+3)/2 - 1;
      	for(int i = n3; i<n; i++)
          	if(s.charAt(i)!=s.charAt(n-(i-n3)-1))p = false;
      	if(p)System.out.println("Yes");
      	else System.out.println("No");
	}
	static String next () throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine().trim());
		return st.nextToken();
	}
	static long readLong () throws IOException {
		return Long.parseLong(next());
	}
	static int readInt () throws IOException {
		return Integer.parseInt(next());
	}
	static double readDouble () throws IOException {
		return Double.parseDouble(next());
	}
	static char readCharacter () throws IOException {
		return next().charAt(0);
	}
	static String readLine () throws IOException {
		return br.readLine().trim();
	}
} Main
import java.util.*;
import java.io.*;
public class Main {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
	static StringTokenizer st;
	public static void main(String[] args) throws IOException {
		String s = readLine();
      	boolean p = true;
      	int n = s.length();
      	for(int i = 0; i<n; i++){
          	if(s.charAt(i)!=s.charAt(n-i-1))p = false;
        }
      	int n2 = (n-1)/2;
      	for(int i = 0; i<n2; i++)
          	if(s.charAt(i)!=s.charAt(n2-i-1))p = false;
      	int n3 = (n+3)/2 - 1;
      	for(int i = n3; i<n; i++)
          	if(s.charAt(i)!=s.charAt(n-(i-n3)-1))p = false;
      	if(p)System.out.println("Yes");
      	else System.out.println("No");
	}
	static String next () throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine().trim());
		return st.nextToken();
	}
	static long readLong () throws IOException {
		return Long.parseLong(next());
	}
	static int readInt () throws IOException {
		return Integer.parseInt(next());
	}
	static double readDouble () throws IOException {
		return Double.parseDouble(next());
	}
	static char readCharacter () throws IOException {
		return next().charAt(0);
	}
	static String readLine () throws IOException {
		return br.readLine().trim();
	}
}