

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;


public class Main {
	
	static boolean isPalindrome(String s) {
		StringBuilder res = new StringBuilder(s);
		String test = res.reverse().toString();
		if(test.compareTo(s) == 0)
			return true;
		else
			return false;
	}
	
	public static void main(String[] args) throws java.lang.Exception {
		MyScanner sc = new MyScanner();
      out = new PrintWriter(new BufferedOutputStream(System.out));
      String s = sc.nextLine();
      
      if(isPalindrome(s) == true) {
    	  int n = s.length();
    	  String left = s.substring(0,(n - 1) / 2);
    	  String right = s.substring((n + 1) / 2, n);
    	  if(isPalindrome(left) == true && isPalindrome(right) == true)
    		  System.out.println("Yes");
    	  else
    		  System.out.println("No");
      }
      else
    	  System.out.println("No");
      
      
      
      out.close();
	}
	public static PrintWriter out;

	   public static class MyScanner {
	      BufferedReader br;
	      StringTokenizer st;
	 
	      public MyScanner() {
	         br = new BufferedReader(new InputStreamReader(System.in));
	      }
	 
	      String next() {
	          while (st == null || !st.hasMoreElements()) {
	              try {
	                  st = new StringTokenizer(br.readLine());
	              } catch (IOException e) {
	                  e.printStackTrace();
	              }
	          }
	          return st.nextToken();
	      }
	 
	      int nextInt() {
	          return Integer.parseInt(next());
	      }
	 
	      long nextLong() {
	          return Long.parseLong(next());
	      }
	 
	      double nextDouble() {
	          return Double.parseDouble(next());
	      }
	 
	      String nextLine(){
	          String str = "";
		  try {
		     str = br.readLine();
		  } catch (IOException e) {
		     e.printStackTrace();
		  }
		  return str;
	      }

	   }

      

} import java.io.BufferedOutputStream; BufferedOutputStream java.io import java.io.BufferedReader; BufferedReader java.io import java.io.IOException; IOException java.io import java.io.InputStreamReader; InputStreamReader java.io import java.io.PrintWriter; PrintWriter java.io import java.util.StringTokenizer; StringTokenizer java.util public class Main {
	
	static boolean isPalindrome(String s) {
		StringBuilder res = new StringBuilder(s);
		String test = res.reverse().toString();
		if(test.compareTo(s) == 0)
			return true;
		else
			return false;
	}
	
	public static void main(String[] args) throws java.lang.Exception {
		MyScanner sc = new MyScanner();
      out = new PrintWriter(new BufferedOutputStream(System.out));
      String s = sc.nextLine();
      
      if(isPalindrome(s) == true) {
    	  int n = s.length();
    	  String left = s.substring(0,(n - 1) / 2);
    	  String right = s.substring((n + 1) / 2, n);
    	  if(isPalindrome(left) == true && isPalindrome(right) == true)
    		  System.out.println("Yes");
    	  else
    		  System.out.println("No");
      }
      else
    	  System.out.println("No");
      
      
      
      out.close();
	}
	public static PrintWriter out;

	   public static class MyScanner {
	      BufferedReader br;
	      StringTokenizer st;
	 
	      public MyScanner() {
	         br = new BufferedReader(new InputStreamReader(System.in));
	      }
	 
	      String next() {
	          while (st == null || !st.hasMoreElements()) {
	              try {
	                  st = new StringTokenizer(br.readLine());
	              } catch (IOException e) {
	                  e.printStackTrace();
	              }
	          }
	          return st.nextToken();
	      }
	 
	      int nextInt() {
	          return Integer.parseInt(next());
	      }
	 
	      long nextLong() {
	          return Long.parseLong(next());
	      }
	 
	      double nextDouble() {
	          return Double.parseDouble(next());
	      }
	 
	      String nextLine(){
	          String str = "";
		  try {
		     str = br.readLine();
		  } catch (IOException e) {
		     e.printStackTrace();
		  }
		  return str;
	      }

	   }

      

} Main public static PrintWriter out; out static boolean isPalindrome(String s) {
		StringBuilder res = new StringBuilder(s);
		String test = res.reverse().toString();
		if(test.compareTo(s) == 0)
			return true;
		else
			return false;
	} isPalindrome {
		StringBuilder res = new StringBuilder(s);
		String test = res.reverse().toString();
		if(test.compareTo(s) == 0)
			return true;
		else
			return false;
	} StringBuilder res = new StringBuilder(s); res new StringBuilder(s) String test = res.reverse().toString(); test res.reverse().toString() res.reverse().toString res.reverse() res.reverse res if(test.compareTo(s) == 0)
			return true;
		else
			return false; test.compareTo(s) == 0 test.compareTo(s) test.compareTo test s 0 return true; true return false; false String s s public static void main(String[] args) throws java.lang.Exception {
		MyScanner sc = new MyScanner();
      out = new PrintWriter(new BufferedOutputStream(System.out));
      String s = sc.nextLine();
      
      if(isPalindrome(s) == true) {
    	  int n = s.length();
    	  String left = s.substring(0,(n - 1) / 2);
    	  String right = s.substring((n + 1) / 2, n);
    	  if(isPalindrome(left) == true && isPalindrome(right) == true)
    		  System.out.println("Yes");
    	  else
    		  System.out.println("No");
      }
      else
    	  System.out.println("No");
      
      
      
      out.close();
	} main {
		MyScanner sc = new MyScanner();
      out = new PrintWriter(new BufferedOutputStream(System.out));
      String s = sc.nextLine();
      
      if(isPalindrome(s) == true) {
    	  int n = s.length();
    	  String left = s.substring(0,(n - 1) / 2);
    	  String right = s.substring((n + 1) / 2, n);
    	  if(isPalindrome(left) == true && isPalindrome(right) == true)
    		  System.out.println("Yes");
    	  else
    		  System.out.println("No");
      }
      else
    	  System.out.println("No");
      
      
      
      out.close();
	} MyScanner sc = new MyScanner(); sc new MyScanner() out = new PrintWriter(new BufferedOutputStream(System.out)) out new PrintWriter(new BufferedOutputStream(System.out)) String s = sc.nextLine(); s sc.nextLine() sc.nextLine sc if(isPalindrome(s) == true) {
    	  int n = s.length();
    	  String left = s.substring(0,(n - 1) / 2);
    	  String right = s.substring((n + 1) / 2, n);
    	  if(isPalindrome(left) == true && isPalindrome(right) == true)
    		  System.out.println("Yes");
    	  else
    		  System.out.println("No");
      }
      else
    	  System.out.println("No"); isPalindrome(s) == true isPalindrome(s) isPalindrome s true {
    	  int n = s.length();
    	  String left = s.substring(0,(n - 1) / 2);
    	  String right = s.substring((n + 1) / 2, n);
    	  if(isPalindrome(left) == true && isPalindrome(right) == true)
    		  System.out.println("Yes");
    	  else
    		  System.out.println("No");
      } int n = s.length(); n s.length() s.length s String left = s.substring(0,(n - 1) / 2); left s.substring(0,(n - 1) / 2) s.substring s 0 (n - 1) / 2 (n - 1) n 1 2 String right = s.substring((n + 1) / 2, n); right s.substring((n + 1) / 2, n) s.substring s (n + 1) / 2 (n + 1) n 1 2 n if(isPalindrome(left) == true && isPalindrome(right) == true)
    		  System.out.println("Yes");
    	  else
    		  System.out.println("No"); isPalindrome(left) == true && isPalindrome(right) == true isPalindrome(left) == true isPalindrome(left) isPalindrome left true isPalindrome(right) == true isPalindrome(right) isPalindrome right true 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" System.out.println("No") System.out.println System.out System System.out "No" out.close() out.close out String[] args args public static class MyScanner {
	      BufferedReader br;
	      StringTokenizer st;
	 
	      public MyScanner() {
	         br = new BufferedReader(new InputStreamReader(System.in));
	      }
	 
	      String next() {
	          while (st == null || !st.hasMoreElements()) {
	              try {
	                  st = new StringTokenizer(br.readLine());
	              } catch (IOException e) {
	                  e.printStackTrace();
	              }
	          }
	          return st.nextToken();
	      }
	 
	      int nextInt() {
	          return Integer.parseInt(next());
	      }
	 
	      long nextLong() {
	          return Long.parseLong(next());
	      }
	 
	      double nextDouble() {
	          return Double.parseDouble(next());
	      }
	 
	      String nextLine(){
	          String str = "";
		  try {
		     str = br.readLine();
		  } catch (IOException e) {
		     e.printStackTrace();
		  }
		  return str;
	      }

	   } MyScanner BufferedReader br; br StringTokenizer st; st public MyScanner() {
	         br = new BufferedReader(new InputStreamReader(System.in));
	      } MyScanner {
	         br = new BufferedReader(new InputStreamReader(System.in));
	      } br = new BufferedReader(new InputStreamReader(System.in)) br new BufferedReader(new InputStreamReader(System.in)) String next() {
	          while (st == null || !st.hasMoreElements()) {
	              try {
	                  st = new StringTokenizer(br.readLine());
	              } catch (IOException e) {
	                  e.printStackTrace();
	              }
	          }
	          return st.nextToken();
	      } next {
	          while (st == null || !st.hasMoreElements()) {
	              try {
	                  st = new StringTokenizer(br.readLine());
	              } catch (IOException e) {
	                  e.printStackTrace();
	              }
	          }
	          return st.nextToken();
	      } while (st == null || !st.hasMoreElements()) {
	              try {
	                  st = new StringTokenizer(br.readLine());
	              } catch (IOException e) {
	                  e.printStackTrace();
	              }
	          } st == null || !st.hasMoreElements() st == null st null !st.hasMoreElements() st.hasMoreElements() st.hasMoreElements st {
	              try {
	                  st = new StringTokenizer(br.readLine());
	              } catch (IOException e) {
	                  e.printStackTrace();
	              }
	          } try {
	                  st = new StringTokenizer(br.readLine());
	              } catch (IOException e) {
	                  e.printStackTrace();
	              } catch (IOException e) {
	                  e.printStackTrace();
	              } IOException e {
	                  e.printStackTrace();
	              } e.printStackTrace() e.printStackTrace e {
	                  st = new StringTokenizer(br.readLine());
	              } st = new StringTokenizer(br.readLine()) st new StringTokenizer(br.readLine()) return st.nextToken(); st.nextToken() st.nextToken st int nextInt() {
	          return Integer.parseInt(next());
	      } nextInt {
	          return Integer.parseInt(next());
	      } return Integer.parseInt(next()); Integer.parseInt(next()) Integer.parseInt Integer next() next long nextLong() {
	          return Long.parseLong(next());
	      } nextLong {
	          return Long.parseLong(next());
	      } return Long.parseLong(next()); Long.parseLong(next()) Long.parseLong Long next() next double nextDouble() {
	          return Double.parseDouble(next());
	      } nextDouble {
	          return Double.parseDouble(next());
	      } return Double.parseDouble(next()); Double.parseDouble(next()) Double.parseDouble Double next() next String nextLine(){
	          String str = "";
		  try {
		     str = br.readLine();
		  } catch (IOException e) {
		     e.printStackTrace();
		  }
		  return str;
	      } nextLine {
	          String str = "";
		  try {
		     str = br.readLine();
		  } catch (IOException e) {
		     e.printStackTrace();
		  }
		  return str;
	      } String str = ""; str "" try {
		     str = br.readLine();
		  } catch (IOException e) {
		     e.printStackTrace();
		  } catch (IOException e) {
		     e.printStackTrace();
		  } IOException e {
		     e.printStackTrace();
		  } e.printStackTrace() e.printStackTrace e {
		     str = br.readLine();
		  } str = br.readLine() str br.readLine() br.readLine br return str; str public class Main {
	
	static boolean isPalindrome(String s) {
		StringBuilder res = new StringBuilder(s);
		String test = res.reverse().toString();
		if(test.compareTo(s) == 0)
			return true;
		else
			return false;
	}
	
	public static void main(String[] args) throws java.lang.Exception {
		MyScanner sc = new MyScanner();
      out = new PrintWriter(new BufferedOutputStream(System.out));
      String s = sc.nextLine();
      
      if(isPalindrome(s) == true) {
    	  int n = s.length();
    	  String left = s.substring(0,(n - 1) / 2);
    	  String right = s.substring((n + 1) / 2, n);
    	  if(isPalindrome(left) == true && isPalindrome(right) == true)
    		  System.out.println("Yes");
    	  else
    		  System.out.println("No");
      }
      else
    	  System.out.println("No");
      
      
      
      out.close();
	}
	public static PrintWriter out;

	   public static class MyScanner {
	      BufferedReader br;
	      StringTokenizer st;
	 
	      public MyScanner() {
	         br = new BufferedReader(new InputStreamReader(System.in));
	      }
	 
	      String next() {
	          while (st == null || !st.hasMoreElements()) {
	              try {
	                  st = new StringTokenizer(br.readLine());
	              } catch (IOException e) {
	                  e.printStackTrace();
	              }
	          }
	          return st.nextToken();
	      }
	 
	      int nextInt() {
	          return Integer.parseInt(next());
	      }
	 
	      long nextLong() {
	          return Long.parseLong(next());
	      }
	 
	      double nextDouble() {
	          return Double.parseDouble(next());
	      }
	 
	      String nextLine(){
	          String str = "";
		  try {
		     str = br.readLine();
		  } catch (IOException e) {
		     e.printStackTrace();
		  }
		  return str;
	      }

	   }

      

} public class Main {
	
	static boolean isPalindrome(String s) {
		StringBuilder res = new StringBuilder(s);
		String test = res.reverse().toString();
		if(test.compareTo(s) == 0)
			return true;
		else
			return false;
	}
	
	public static void main(String[] args) throws java.lang.Exception {
		MyScanner sc = new MyScanner();
      out = new PrintWriter(new BufferedOutputStream(System.out));
      String s = sc.nextLine();
      
      if(isPalindrome(s) == true) {
    	  int n = s.length();
    	  String left = s.substring(0,(n - 1) / 2);
    	  String right = s.substring((n + 1) / 2, n);
    	  if(isPalindrome(left) == true && isPalindrome(right) == true)
    		  System.out.println("Yes");
    	  else
    		  System.out.println("No");
      }
      else
    	  System.out.println("No");
      
      
      
      out.close();
	}
	public static PrintWriter out;

	   public static class MyScanner {
	      BufferedReader br;
	      StringTokenizer st;
	 
	      public MyScanner() {
	         br = new BufferedReader(new InputStreamReader(System.in));
	      }
	 
	      String next() {
	          while (st == null || !st.hasMoreElements()) {
	              try {
	                  st = new StringTokenizer(br.readLine());
	              } catch (IOException e) {
	                  e.printStackTrace();
	              }
	          }
	          return st.nextToken();
	      }
	 
	      int nextInt() {
	          return Integer.parseInt(next());
	      }
	 
	      long nextLong() {
	          return Long.parseLong(next());
	      }
	 
	      double nextDouble() {
	          return Double.parseDouble(next());
	      }
	 
	      String nextLine(){
	          String str = "";
		  try {
		     str = br.readLine();
		  } catch (IOException e) {
		     e.printStackTrace();
		  }
		  return str;
	      }

	   }

      

} Main


import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;


public class Main {
	
	static boolean isPalindrome(String s) {
		StringBuilder res = new StringBuilder(s);
		String test = res.reverse().toString();
		if(test.compareTo(s) == 0)
			return true;
		else
			return false;
	}
	
	public static void main(String[] args) throws java.lang.Exception {
		MyScanner sc = new MyScanner();
      out = new PrintWriter(new BufferedOutputStream(System.out));
      String s = sc.nextLine();
      
      if(isPalindrome(s) == true) {
    	  int n = s.length();
    	  String left = s.substring(0,(n - 1) / 2);
    	  String right = s.substring((n + 1) / 2, n);
    	  if(isPalindrome(left) == true && isPalindrome(right) == true)
    		  System.out.println("Yes");
    	  else
    		  System.out.println("No");
      }
      else
    	  System.out.println("No");
      
      
      
      out.close();
	}
	public static PrintWriter out;

	   public static class MyScanner {
	      BufferedReader br;
	      StringTokenizer st;
	 
	      public MyScanner() {
	         br = new BufferedReader(new InputStreamReader(System.in));
	      }
	 
	      String next() {
	          while (st == null || !st.hasMoreElements()) {
	              try {
	                  st = new StringTokenizer(br.readLine());
	              } catch (IOException e) {
	                  e.printStackTrace();
	              }
	          }
	          return st.nextToken();
	      }
	 
	      int nextInt() {
	          return Integer.parseInt(next());
	      }
	 
	      long nextLong() {
	          return Long.parseLong(next());
	      }
	 
	      double nextDouble() {
	          return Double.parseDouble(next());
	      }
	 
	      String nextLine(){
	          String str = "";
		  try {
		     str = br.readLine();
		  } catch (IOException e) {
		     e.printStackTrace();
		  }
		  return str;
	      }

	   }

      

}
