import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String s = sc.next();

    if (!isKaibun(s)) {
      System.out.println("No");
      return;
    }

    int middle = (s.length() + 1) / 2;
    if (!isKaibun(s.substring(0, middle - 1)) || !isKaibun(s.substring(middle))) {
      System.out.println("No");
      return;
    }

    System.out.println("Yes");
    return;
  }

  static boolean isKaibun(String s) {
    int h = 0;
    int e = s.length() - 1;

    while (h < e) {
      if (!(s.substring(h, h + 1).equals(s.substring(e, e + 1)))) {
        return false;
      }
      h++;
      e--;
    }

    return true;
  }
} 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 (!isKaibun(s)) {
      System.out.println("No");
      return;
    }

    int middle = (s.length() + 1) / 2;
    if (!isKaibun(s.substring(0, middle - 1)) || !isKaibun(s.substring(middle))) {
      System.out.println("No");
      return;
    }

    System.out.println("Yes");
    return;
  }

  static boolean isKaibun(String s) {
    int h = 0;
    int e = s.length() - 1;

    while (h < e) {
      if (!(s.substring(h, h + 1).equals(s.substring(e, e + 1)))) {
        return false;
      }
      h++;
      e--;
    }

    return true;
  }
} Main public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String s = sc.next();

    if (!isKaibun(s)) {
      System.out.println("No");
      return;
    }

    int middle = (s.length() + 1) / 2;
    if (!isKaibun(s.substring(0, middle - 1)) || !isKaibun(s.substring(middle))) {
      System.out.println("No");
      return;
    }

    System.out.println("Yes");
    return;
  } main {
    Scanner sc = new Scanner(System.in);
    String s = sc.next();

    if (!isKaibun(s)) {
      System.out.println("No");
      return;
    }

    int middle = (s.length() + 1) / 2;
    if (!isKaibun(s.substring(0, middle - 1)) || !isKaibun(s.substring(middle))) {
      System.out.println("No");
      return;
    }

    System.out.println("Yes");
    return;
  } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) String s = sc.next(); s sc.next() sc.next sc if (!isKaibun(s)) {
      System.out.println("No");
      return;
    } !isKaibun(s) isKaibun(s) isKaibun s {
      System.out.println("No");
      return;
    } System.out.println("No") System.out.println System.out System System.out "No" return; int middle = (s.length() + 1) / 2; middle (s.length() + 1) / 2 (s.length() + 1) s.length() s.length s 1 2 if (!isKaibun(s.substring(0, middle - 1)) || !isKaibun(s.substring(middle))) {
      System.out.println("No");
      return;
    } !isKaibun(s.substring(0, middle - 1)) || !isKaibun(s.substring(middle)) !isKaibun(s.substring(0, middle - 1)) isKaibun(s.substring(0, middle - 1)) isKaibun s.substring(0, middle - 1) s.substring s 0 middle - 1 middle 1 !isKaibun(s.substring(middle)) isKaibun(s.substring(middle)) isKaibun s.substring(middle) s.substring s middle {
      System.out.println("No");
      return;
    } System.out.println("No") System.out.println System.out System System.out "No" return; System.out.println("Yes") System.out.println System.out System System.out "Yes" return; String[] args args static boolean isKaibun(String s) {
    int h = 0;
    int e = s.length() - 1;

    while (h < e) {
      if (!(s.substring(h, h + 1).equals(s.substring(e, e + 1)))) {
        return false;
      }
      h++;
      e--;
    }

    return true;
  } isKaibun {
    int h = 0;
    int e = s.length() - 1;

    while (h < e) {
      if (!(s.substring(h, h + 1).equals(s.substring(e, e + 1)))) {
        return false;
      }
      h++;
      e--;
    }

    return true;
  } int h = 0; h 0 int e = s.length() - 1; e s.length() - 1 s.length() s.length s 1 while (h < e) {
      if (!(s.substring(h, h + 1).equals(s.substring(e, e + 1)))) {
        return false;
      }
      h++;
      e--;
    } h < e h e {
      if (!(s.substring(h, h + 1).equals(s.substring(e, e + 1)))) {
        return false;
      }
      h++;
      e--;
    } if (!(s.substring(h, h + 1).equals(s.substring(e, e + 1)))) {
        return false;
      } !(s.substring(h, h + 1).equals(s.substring(e, e + 1))) (s.substring(h, h + 1).equals(s.substring(e, e + 1))) s.substring(h, h + 1).equals s.substring(h, h + 1) s.substring s h h + 1 h 1 s.substring(e, e + 1) s.substring s e e + 1 e 1 {
        return false;
      } return false; false h++ h e-- e return true; true String s s public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String s = sc.next();

    if (!isKaibun(s)) {
      System.out.println("No");
      return;
    }

    int middle = (s.length() + 1) / 2;
    if (!isKaibun(s.substring(0, middle - 1)) || !isKaibun(s.substring(middle))) {
      System.out.println("No");
      return;
    }

    System.out.println("Yes");
    return;
  }

  static boolean isKaibun(String s) {
    int h = 0;
    int e = s.length() - 1;

    while (h < e) {
      if (!(s.substring(h, h + 1).equals(s.substring(e, e + 1)))) {
        return false;
      }
      h++;
      e--;
    }

    return true;
  }
} public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String s = sc.next();

    if (!isKaibun(s)) {
      System.out.println("No");
      return;
    }

    int middle = (s.length() + 1) / 2;
    if (!isKaibun(s.substring(0, middle - 1)) || !isKaibun(s.substring(middle))) {
      System.out.println("No");
      return;
    }

    System.out.println("Yes");
    return;
  }

  static boolean isKaibun(String s) {
    int h = 0;
    int e = s.length() - 1;

    while (h < e) {
      if (!(s.substring(h, h + 1).equals(s.substring(e, e + 1)))) {
        return false;
      }
      h++;
      e--;
    }

    return true;
  }
} 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 (!isKaibun(s)) {
      System.out.println("No");
      return;
    }

    int middle = (s.length() + 1) / 2;
    if (!isKaibun(s.substring(0, middle - 1)) || !isKaibun(s.substring(middle))) {
      System.out.println("No");
      return;
    }

    System.out.println("Yes");
    return;
  }

  static boolean isKaibun(String s) {
    int h = 0;
    int e = s.length() - 1;

    while (h < e) {
      if (!(s.substring(h, h + 1).equals(s.substring(e, e + 1)))) {
        return false;
      }
      h++;
      e--;
    }

    return true;
  }
}
