import java.util.Scanner;
 
public class Main {
 
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String S = sc.next();
    boolean anskey = false;
    if (check(S) 
    		&& check(S.substring(0,(S.length()-1)/2)) 
    		&& check(S.substring(((S.length()+3)/2) - 1))) {
    	anskey = true;
    }
    System.out.println(anskey ? "Yes" : "No");
  }
  
  public static boolean check(String s) {
	  boolean key = true;
	  int N = s.length();
	  int L = N - 1;
	  for (int i = 0; i < N/2; i++) {
		  if (s.charAt(i) != s.charAt(L)) {
			  key = false;
			  break;
		  }
		  L--;
	  }
	  return key;
  }
} import java.util.Scanner; Scanner java.util public class Main {
 
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String S = sc.next();
    boolean anskey = false;
    if (check(S) 
    		&& check(S.substring(0,(S.length()-1)/2)) 
    		&& check(S.substring(((S.length()+3)/2) - 1))) {
    	anskey = true;
    }
    System.out.println(anskey ? "Yes" : "No");
  }
  
  public static boolean check(String s) {
	  boolean key = true;
	  int N = s.length();
	  int L = N - 1;
	  for (int i = 0; i < N/2; i++) {
		  if (s.charAt(i) != s.charAt(L)) {
			  key = false;
			  break;
		  }
		  L--;
	  }
	  return key;
  }
} Main public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String S = sc.next();
    boolean anskey = false;
    if (check(S) 
    		&& check(S.substring(0,(S.length()-1)/2)) 
    		&& check(S.substring(((S.length()+3)/2) - 1))) {
    	anskey = true;
    }
    System.out.println(anskey ? "Yes" : "No");
  } main {
    Scanner sc = new Scanner(System.in);
    String S = sc.next();
    boolean anskey = false;
    if (check(S) 
    		&& check(S.substring(0,(S.length()-1)/2)) 
    		&& check(S.substring(((S.length()+3)/2) - 1))) {
    	anskey = true;
    }
    System.out.println(anskey ? "Yes" : "No");
  } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) String S = sc.next(); S sc.next() sc.next sc boolean anskey = false; anskey false if (check(S) 
    		&& check(S.substring(0,(S.length()-1)/2)) 
    		&& check(S.substring(((S.length()+3)/2) - 1))) {
    	anskey = true;
    } check(S) 
    		&& check(S.substring(0,(S.length()-1)/2)) 
    		&& check(S.substring(((S.length()+3)/2) - 1)) check(S) 
    		&& check(S.substring(0,(S.length()-1)/2)) 
    		&& check(S.substring(((S.length()+3)/2) - 1)) check(S) check S check(S.substring(0,(S.length()-1)/2)) check S.substring(0,(S.length()-1)/2) S.substring S 0 (S.length()-1)/2 (S.length()-1) S.length() S.length S 1 2 check(S.substring(((S.length()+3)/2) - 1)) check S.substring(((S.length()+3)/2) - 1) S.substring S ((S.length()+3)/2) - 1 ((S.length()+3)/2) (S.length()+3) S.length() S.length S 3 2 1 {
    	anskey = true;
    } anskey = true anskey true System.out.println(anskey ? "Yes" : "No") System.out.println System.out System System.out anskey ? "Yes" : "No" anskey "Yes" "No" String[] args args public static boolean check(String s) {
	  boolean key = true;
	  int N = s.length();
	  int L = N - 1;
	  for (int i = 0; i < N/2; i++) {
		  if (s.charAt(i) != s.charAt(L)) {
			  key = false;
			  break;
		  }
		  L--;
	  }
	  return key;
  } check {
	  boolean key = true;
	  int N = s.length();
	  int L = N - 1;
	  for (int i = 0; i < N/2; i++) {
		  if (s.charAt(i) != s.charAt(L)) {
			  key = false;
			  break;
		  }
		  L--;
	  }
	  return key;
  } boolean key = true; key true int N = s.length(); N s.length() s.length s int L = N - 1; L N - 1 N 1 for (int i = 0; i < N/2; i++) {
		  if (s.charAt(i) != s.charAt(L)) {
			  key = false;
			  break;
		  }
		  L--;
	  } int i = 0; int i = 0; i 0 i < N/2 i N/2 N 2 i++ i++ i {
		  if (s.charAt(i) != s.charAt(L)) {
			  key = false;
			  break;
		  }
		  L--;
	  } {
		  if (s.charAt(i) != s.charAt(L)) {
			  key = false;
			  break;
		  }
		  L--;
	  } if (s.charAt(i) != s.charAt(L)) {
			  key = false;
			  break;
		  } s.charAt(i) != s.charAt(L) s.charAt(i) s.charAt s i s.charAt(L) s.charAt s L {
			  key = false;
			  break;
		  } key = false key false break; L-- L return key; key String s s public class Main {
 
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String S = sc.next();
    boolean anskey = false;
    if (check(S) 
    		&& check(S.substring(0,(S.length()-1)/2)) 
    		&& check(S.substring(((S.length()+3)/2) - 1))) {
    	anskey = true;
    }
    System.out.println(anskey ? "Yes" : "No");
  }
  
  public static boolean check(String s) {
	  boolean key = true;
	  int N = s.length();
	  int L = N - 1;
	  for (int i = 0; i < N/2; i++) {
		  if (s.charAt(i) != s.charAt(L)) {
			  key = false;
			  break;
		  }
		  L--;
	  }
	  return key;
  }
} public class Main {
 
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String S = sc.next();
    boolean anskey = false;
    if (check(S) 
    		&& check(S.substring(0,(S.length()-1)/2)) 
    		&& check(S.substring(((S.length()+3)/2) - 1))) {
    	anskey = true;
    }
    System.out.println(anskey ? "Yes" : "No");
  }
  
  public static boolean check(String s) {
	  boolean key = true;
	  int N = s.length();
	  int L = N - 1;
	  for (int i = 0; i < N/2; i++) {
		  if (s.charAt(i) != s.charAt(L)) {
			  key = false;
			  break;
		  }
		  L--;
	  }
	  return key;
  }
} Main
import java.util.Scanner;
 
public class Main {
 
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String S = sc.next();
    boolean anskey = false;
    if (check(S) 
    		&& check(S.substring(0,(S.length()-1)/2)) 
    		&& check(S.substring(((S.length()+3)/2) - 1))) {
    	anskey = true;
    }
    System.out.println(anskey ? "Yes" : "No");
  }
  
  public static boolean check(String s) {
	  boolean key = true;
	  int N = s.length();
	  int L = N - 1;
	  for (int i = 0; i < N/2; i++) {
		  if (s.charAt(i) != s.charAt(L)) {
			  key = false;
			  break;
		  }
		  L--;
	  }
	  return key;
  }
}
