import java.util.Scanner;
public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String s = sc.next();
    if(check1(s) && check2(s) && check3(s)){
      System.out.println("Yes");
    }else{
      System.out.println("No");
    }
  }  
  static boolean check1(String s){
    StringBuffer buf = new StringBuffer(s);
    String str = buf.reverse().toString();
    if(s.equals(str)){
      return true;
    }else{
      return false;
    }
  }
  static boolean check2(String s){
    String str1 = s.substring(0,s.length()/2);
    StringBuffer buf = new StringBuffer(str1);
    String str = buf.reverse().toString();
    if(str1.equals(str)){
      return true;
    }else{
      return false;
    }
  }
  static boolean check3(String s){
    String str1 = s.substring(s.length()/2+1);
    StringBuffer buf = new StringBuffer(str1);
    String str = buf.reverse().toString();
    if(str1.equals(str)){
      return true;
    }else{
      return false;
    }
  }
} 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();
    if(check1(s) && check2(s) && check3(s)){
      System.out.println("Yes");
    }else{
      System.out.println("No");
    }
  }  
  static boolean check1(String s){
    StringBuffer buf = new StringBuffer(s);
    String str = buf.reverse().toString();
    if(s.equals(str)){
      return true;
    }else{
      return false;
    }
  }
  static boolean check2(String s){
    String str1 = s.substring(0,s.length()/2);
    StringBuffer buf = new StringBuffer(str1);
    String str = buf.reverse().toString();
    if(str1.equals(str)){
      return true;
    }else{
      return false;
    }
  }
  static boolean check3(String s){
    String str1 = s.substring(s.length()/2+1);
    StringBuffer buf = new StringBuffer(str1);
    String str = buf.reverse().toString();
    if(str1.equals(str)){
      return true;
    }else{
      return false;
    }
  }
} Main public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String s = sc.next();
    if(check1(s) && check2(s) && check3(s)){
      System.out.println("Yes");
    }else{
      System.out.println("No");
    }
  } main {
    Scanner sc = new Scanner(System.in);
    String s = sc.next();
    if(check1(s) && check2(s) && check3(s)){
      System.out.println("Yes");
    }else{
      System.out.println("No");
    }
  } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) String s = sc.next(); s sc.next() sc.next sc if(check1(s) && check2(s) && check3(s)){
      System.out.println("Yes");
    }else{
      System.out.println("No");
    } check1(s) && check2(s) && check3(s) check1(s) && check2(s) && check3(s) check1(s) check1 s check2(s) check2 s check3(s) check3 s {
      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" String[] args args static boolean check1(String s){
    StringBuffer buf = new StringBuffer(s);
    String str = buf.reverse().toString();
    if(s.equals(str)){
      return true;
    }else{
      return false;
    }
  } check1 {
    StringBuffer buf = new StringBuffer(s);
    String str = buf.reverse().toString();
    if(s.equals(str)){
      return true;
    }else{
      return false;
    }
  } StringBuffer buf = new StringBuffer(s); buf new StringBuffer(s) String str = buf.reverse().toString(); str buf.reverse().toString() buf.reverse().toString buf.reverse() buf.reverse buf if(s.equals(str)){
      return true;
    }else{
      return false;
    } s.equals(str) s.equals s str {
      return true;
    } return true; true {
      return false;
    } return false; false String s s static boolean check2(String s){
    String str1 = s.substring(0,s.length()/2);
    StringBuffer buf = new StringBuffer(str1);
    String str = buf.reverse().toString();
    if(str1.equals(str)){
      return true;
    }else{
      return false;
    }
  } check2 {
    String str1 = s.substring(0,s.length()/2);
    StringBuffer buf = new StringBuffer(str1);
    String str = buf.reverse().toString();
    if(str1.equals(str)){
      return true;
    }else{
      return false;
    }
  } String str1 = s.substring(0,s.length()/2); str1 s.substring(0,s.length()/2) s.substring s 0 s.length()/2 s.length() s.length s 2 StringBuffer buf = new StringBuffer(str1); buf new StringBuffer(str1) String str = buf.reverse().toString(); str buf.reverse().toString() buf.reverse().toString buf.reverse() buf.reverse buf if(str1.equals(str)){
      return true;
    }else{
      return false;
    } str1.equals(str) str1.equals str1 str {
      return true;
    } return true; true {
      return false;
    } return false; false String s s static boolean check3(String s){
    String str1 = s.substring(s.length()/2+1);
    StringBuffer buf = new StringBuffer(str1);
    String str = buf.reverse().toString();
    if(str1.equals(str)){
      return true;
    }else{
      return false;
    }
  } check3 {
    String str1 = s.substring(s.length()/2+1);
    StringBuffer buf = new StringBuffer(str1);
    String str = buf.reverse().toString();
    if(str1.equals(str)){
      return true;
    }else{
      return false;
    }
  } String str1 = s.substring(s.length()/2+1); str1 s.substring(s.length()/2+1) s.substring s s.length()/2+1 s.length()/2 s.length() s.length s 2 1 StringBuffer buf = new StringBuffer(str1); buf new StringBuffer(str1) String str = buf.reverse().toString(); str buf.reverse().toString() buf.reverse().toString buf.reverse() buf.reverse buf if(str1.equals(str)){
      return true;
    }else{
      return false;
    } str1.equals(str) str1.equals str1 str {
      return true;
    } return true; true {
      return false;
    } return false; false String s s public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String s = sc.next();
    if(check1(s) && check2(s) && check3(s)){
      System.out.println("Yes");
    }else{
      System.out.println("No");
    }
  }  
  static boolean check1(String s){
    StringBuffer buf = new StringBuffer(s);
    String str = buf.reverse().toString();
    if(s.equals(str)){
      return true;
    }else{
      return false;
    }
  }
  static boolean check2(String s){
    String str1 = s.substring(0,s.length()/2);
    StringBuffer buf = new StringBuffer(str1);
    String str = buf.reverse().toString();
    if(str1.equals(str)){
      return true;
    }else{
      return false;
    }
  }
  static boolean check3(String s){
    String str1 = s.substring(s.length()/2+1);
    StringBuffer buf = new StringBuffer(str1);
    String str = buf.reverse().toString();
    if(str1.equals(str)){
      return true;
    }else{
      return false;
    }
  }
} public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String s = sc.next();
    if(check1(s) && check2(s) && check3(s)){
      System.out.println("Yes");
    }else{
      System.out.println("No");
    }
  }  
  static boolean check1(String s){
    StringBuffer buf = new StringBuffer(s);
    String str = buf.reverse().toString();
    if(s.equals(str)){
      return true;
    }else{
      return false;
    }
  }
  static boolean check2(String s){
    String str1 = s.substring(0,s.length()/2);
    StringBuffer buf = new StringBuffer(str1);
    String str = buf.reverse().toString();
    if(str1.equals(str)){
      return true;
    }else{
      return false;
    }
  }
  static boolean check3(String s){
    String str1 = s.substring(s.length()/2+1);
    StringBuffer buf = new StringBuffer(str1);
    String str = buf.reverse().toString();
    if(str1.equals(str)){
      return true;
    }else{
      return false;
    }
  }
} Main
import java.util.Scanner;
public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String s = sc.next();
    if(check1(s) && check2(s) && check3(s)){
      System.out.println("Yes");
    }else{
      System.out.println("No");
    }
  }  
  static boolean check1(String s){
    StringBuffer buf = new StringBuffer(s);
    String str = buf.reverse().toString();
    if(s.equals(str)){
      return true;
    }else{
      return false;
    }
  }
  static boolean check2(String s){
    String str1 = s.substring(0,s.length()/2);
    StringBuffer buf = new StringBuffer(str1);
    String str = buf.reverse().toString();
    if(str1.equals(str)){
      return true;
    }else{
      return false;
    }
  }
  static boolean check3(String s){
    String str1 = s.substring(s.length()/2+1);
    StringBuffer buf = new StringBuffer(str1);
    String str = buf.reverse().toString();
    if(str1.equals(str)){
      return true;
    }else{
      return false;
    }
  }
}