import java.util.*;
import java.io.*;

public class Main{
  public static boolean kaibun(String s){
  StringBuffer sb=new StringBuffer(s);
  sb.reverse();
  String t=sb.toString();
  return t.equals(s);
  }
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
  	String s=sc.next();
    int n=s.length();
    char[] a;
    a=s.toCharArray();
    String x="",y="";
    for(int i=0;i<(n-1)/2;i++){
      x+=a[i];
      y+=a[(n+1)/2+i];
    }
    if(kaibun(s)&&kaibun(x)&&kaibun(y)){
      System.out.print("Yes");
    }else{
      System.out.print("No");
    }
    
  }
} import java.util.*; util.* java import java.io.*; io.* java public class Main{
  public static boolean kaibun(String s){
  StringBuffer sb=new StringBuffer(s);
  sb.reverse();
  String t=sb.toString();
  return t.equals(s);
  }
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
  	String s=sc.next();
    int n=s.length();
    char[] a;
    a=s.toCharArray();
    String x="",y="";
    for(int i=0;i<(n-1)/2;i++){
      x+=a[i];
      y+=a[(n+1)/2+i];
    }
    if(kaibun(s)&&kaibun(x)&&kaibun(y)){
      System.out.print("Yes");
    }else{
      System.out.print("No");
    }
    
  }
} Main public static boolean kaibun(String s){
  StringBuffer sb=new StringBuffer(s);
  sb.reverse();
  String t=sb.toString();
  return t.equals(s);
  } kaibun {
  StringBuffer sb=new StringBuffer(s);
  sb.reverse();
  String t=sb.toString();
  return t.equals(s);
  } StringBuffer sb=new StringBuffer(s); sb new StringBuffer(s) sb.reverse() sb.reverse sb String t=sb.toString(); t sb.toString() sb.toString sb return t.equals(s); t.equals(s) t.equals t s String s s public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
  	String s=sc.next();
    int n=s.length();
    char[] a;
    a=s.toCharArray();
    String x="",y="";
    for(int i=0;i<(n-1)/2;i++){
      x+=a[i];
      y+=a[(n+1)/2+i];
    }
    if(kaibun(s)&&kaibun(x)&&kaibun(y)){
      System.out.print("Yes");
    }else{
      System.out.print("No");
    }
    
  } main {
    Scanner sc = new Scanner(System.in);
  	String s=sc.next();
    int n=s.length();
    char[] a;
    a=s.toCharArray();
    String x="",y="";
    for(int i=0;i<(n-1)/2;i++){
      x+=a[i];
      y+=a[(n+1)/2+i];
    }
    if(kaibun(s)&&kaibun(x)&&kaibun(y)){
      System.out.print("Yes");
    }else{
      System.out.print("No");
    }
    
  } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) String s=sc.next(); s sc.next() sc.next sc int n=s.length(); n s.length() s.length s char[] a; a a=s.toCharArray() a s.toCharArray() s.toCharArray s String x="" x "" y=""; y "" for(int i=0;i<(n-1)/2;i++){
      x+=a[i];
      y+=a[(n+1)/2+i];
    } int i=0; int i=0; i 0 i<(n-1)/2 i (n-1)/2 (n-1) n 1 2 i++ i++ i {
      x+=a[i];
      y+=a[(n+1)/2+i];
    } {
      x+=a[i];
      y+=a[(n+1)/2+i];
    } x+=a[i] x a[i] a i y+=a[(n+1)/2+i] y a[(n+1)/2+i] a (n+1)/2+i (n+1)/2 (n+1) n 1 2 i if(kaibun(s)&&kaibun(x)&&kaibun(y)){
      System.out.print("Yes");
    }else{
      System.out.print("No");
    } kaibun(s)&&kaibun(x)&&kaibun(y) kaibun(s)&&kaibun(x)&&kaibun(y) kaibun(s) kaibun s kaibun(x) kaibun x kaibun(y) kaibun y {
      System.out.print("Yes");
    } System.out.print("Yes") System.out.print System.out System System.out "Yes" {
      System.out.print("No");
    } System.out.print("No") System.out.print System.out System System.out "No" String[] args args public class Main{
  public static boolean kaibun(String s){
  StringBuffer sb=new StringBuffer(s);
  sb.reverse();
  String t=sb.toString();
  return t.equals(s);
  }
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
  	String s=sc.next();
    int n=s.length();
    char[] a;
    a=s.toCharArray();
    String x="",y="";
    for(int i=0;i<(n-1)/2;i++){
      x+=a[i];
      y+=a[(n+1)/2+i];
    }
    if(kaibun(s)&&kaibun(x)&&kaibun(y)){
      System.out.print("Yes");
    }else{
      System.out.print("No");
    }
    
  }
} public class Main{
  public static boolean kaibun(String s){
  StringBuffer sb=new StringBuffer(s);
  sb.reverse();
  String t=sb.toString();
  return t.equals(s);
  }
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
  	String s=sc.next();
    int n=s.length();
    char[] a;
    a=s.toCharArray();
    String x="",y="";
    for(int i=0;i<(n-1)/2;i++){
      x+=a[i];
      y+=a[(n+1)/2+i];
    }
    if(kaibun(s)&&kaibun(x)&&kaibun(y)){
      System.out.print("Yes");
    }else{
      System.out.print("No");
    }
    
  }
} Main
import java.util.*;
import java.io.*;

public class Main{
  public static boolean kaibun(String s){
  StringBuffer sb=new StringBuffer(s);
  sb.reverse();
  String t=sb.toString();
  return t.equals(s);
  }
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
  	String s=sc.next();
    int n=s.length();
    char[] a;
    a=s.toCharArray();
    String x="",y="";
    for(int i=0;i<(n-1)/2;i++){
      x+=a[i];
      y+=a[(n+1)/2+i];
    }
    if(kaibun(s)&&kaibun(x)&&kaibun(y)){
      System.out.print("Yes");
    }else{
      System.out.print("No");
    }
    
  }
}