import java.util.Scanner;

/**
 * B - String Palindrome
 * 長さが奇数である文字列 S が以下の条件をすべて満たすとき、S は「強い回文」であるといいます。
 *  ・S は回文である。
 *  ・N を S の長さとするとき、S の 1 文字目から (N−1)/2 文字目まで(両端含む)からなる文字列は回文である。
 *  ・S の (N+3)/2 文字目から N 文字目まで(両端含む)からなる文字列は回文である。
 * S が強い回文かどうかを判定してください。
 */
public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner( System.in );
        // 文字列S
        String s = sc.next();

        String result = "No";
        StringBuilder sbs = new StringBuilder( s );
        // 回文であるか
        if( s.equals( sbs.reverse().toString() ) ) {
            String n = s.substring( 0, ( s.length() - 1 ) / 2 );
//            System.out.println( "n:" + n );
            StringBuilder sbn = new StringBuilder( n );
            // 前の文字が回文であるか
            if( n.equals( sbn.reverse().toString() ) ) {
                String nLast = s.substring( ( s.length() - 1 ) / 2 + 1 );
 //               System.out.println( "nLast:" + nLast );
                StringBuilder sbnLast = new StringBuilder( nLast );
                // 前の文字が回文であるか
                if( nLast.equals( sbnLast.reverse().toString() ) ) {
                    result = "Yes";
                }
            }
        }
        System.out.println( result );

        sc.close();
    }
} import java.util.Scanner; Scanner java.util public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner( System.in );
        // 文字列S
        String s = sc.next();

        String result = "No";
        StringBuilder sbs = new StringBuilder( s );
        // 回文であるか
        if( s.equals( sbs.reverse().toString() ) ) {
            String n = s.substring( 0, ( s.length() - 1 ) / 2 );
//            System.out.println( "n:" + n );
            StringBuilder sbn = new StringBuilder( n );
            // 前の文字が回文であるか
            if( n.equals( sbn.reverse().toString() ) ) {
                String nLast = s.substring( ( s.length() - 1 ) / 2 + 1 );
 //               System.out.println( "nLast:" + nLast );
                StringBuilder sbnLast = new StringBuilder( nLast );
                // 前の文字が回文であるか
                if( nLast.equals( sbnLast.reverse().toString() ) ) {
                    result = "Yes";
                }
            }
        }
        System.out.println( result );

        sc.close();
    }
} Main public static void main(String[] args) {

        Scanner sc = new Scanner( System.in );
        // 文字列S
        String s = sc.next();

        String result = "No";
        StringBuilder sbs = new StringBuilder( s );
        // 回文であるか
        if( s.equals( sbs.reverse().toString() ) ) {
            String n = s.substring( 0, ( s.length() - 1 ) / 2 );
//            System.out.println( "n:" + n );
            StringBuilder sbn = new StringBuilder( n );
            // 前の文字が回文であるか
            if( n.equals( sbn.reverse().toString() ) ) {
                String nLast = s.substring( ( s.length() - 1 ) / 2 + 1 );
 //               System.out.println( "nLast:" + nLast );
                StringBuilder sbnLast = new StringBuilder( nLast );
                // 前の文字が回文であるか
                if( nLast.equals( sbnLast.reverse().toString() ) ) {
                    result = "Yes";
                }
            }
        }
        System.out.println( result );

        sc.close();
    } main {

        Scanner sc = new Scanner( System.in );
        // 文字列S
        String s = sc.next();

        String result = "No";
        StringBuilder sbs = new StringBuilder( s );
        // 回文であるか
        if( s.equals( sbs.reverse().toString() ) ) {
            String n = s.substring( 0, ( s.length() - 1 ) / 2 );
//            System.out.println( "n:" + n );
            StringBuilder sbn = new StringBuilder( n );
            // 前の文字が回文であるか
            if( n.equals( sbn.reverse().toString() ) ) {
                String nLast = s.substring( ( s.length() - 1 ) / 2 + 1 );
 //               System.out.println( "nLast:" + nLast );
                StringBuilder sbnLast = new StringBuilder( nLast );
                // 前の文字が回文であるか
                if( nLast.equals( sbnLast.reverse().toString() ) ) {
                    result = "Yes";
                }
            }
        }
        System.out.println( result );

        sc.close();
    } Scanner sc = new Scanner( System.in ); sc new Scanner( System.in ) String s = sc.next(); s sc.next() sc.next sc String result = "No"; result "No" StringBuilder sbs = new StringBuilder( s ); sbs new StringBuilder( s ) if( s.equals( sbs.reverse().toString() ) ) {
            String n = s.substring( 0, ( s.length() - 1 ) / 2 );
//            System.out.println( "n:" + n );
            StringBuilder sbn = new StringBuilder( n );
            // 前の文字が回文であるか
            if( n.equals( sbn.reverse().toString() ) ) {
                String nLast = s.substring( ( s.length() - 1 ) / 2 + 1 );
 //               System.out.println( "nLast:" + nLast );
                StringBuilder sbnLast = new StringBuilder( nLast );
                // 前の文字が回文であるか
                if( nLast.equals( sbnLast.reverse().toString() ) ) {
                    result = "Yes";
                }
            }
        } s.equals( sbs.reverse().toString() ) s.equals s sbs.reverse().toString() sbs.reverse().toString sbs.reverse() sbs.reverse sbs {
            String n = s.substring( 0, ( s.length() - 1 ) / 2 );
//            System.out.println( "n:" + n );
            StringBuilder sbn = new StringBuilder( n );
            // 前の文字が回文であるか
            if( n.equals( sbn.reverse().toString() ) ) {
                String nLast = s.substring( ( s.length() - 1 ) / 2 + 1 );
 //               System.out.println( "nLast:" + nLast );
                StringBuilder sbnLast = new StringBuilder( nLast );
                // 前の文字が回文であるか
                if( nLast.equals( sbnLast.reverse().toString() ) ) {
                    result = "Yes";
                }
            }
        } String n = s.substring( 0, ( s.length() - 1 ) / 2 ); n 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 StringBuilder sbn = new StringBuilder( n ); sbn new StringBuilder( n ) if( n.equals( sbn.reverse().toString() ) ) {
                String nLast = s.substring( ( s.length() - 1 ) / 2 + 1 );
 //               System.out.println( "nLast:" + nLast );
                StringBuilder sbnLast = new StringBuilder( nLast );
                // 前の文字が回文であるか
                if( nLast.equals( sbnLast.reverse().toString() ) ) {
                    result = "Yes";
                }
            } n.equals( sbn.reverse().toString() ) n.equals n sbn.reverse().toString() sbn.reverse().toString sbn.reverse() sbn.reverse sbn {
                String nLast = s.substring( ( s.length() - 1 ) / 2 + 1 );
 //               System.out.println( "nLast:" + nLast );
                StringBuilder sbnLast = new StringBuilder( nLast );
                // 前の文字が回文であるか
                if( nLast.equals( sbnLast.reverse().toString() ) ) {
                    result = "Yes";
                }
            } String nLast = s.substring( ( s.length() - 1 ) / 2 + 1 ); nLast s.substring( ( s.length() - 1 ) / 2 + 1 ) s.substring s ( s.length() - 1 ) / 2 + 1 ( s.length() - 1 ) / 2 ( s.length() - 1 ) s.length() s.length s 1 2 1 StringBuilder sbnLast = new StringBuilder( nLast ); sbnLast new StringBuilder( nLast ) if( nLast.equals( sbnLast.reverse().toString() ) ) {
                    result = "Yes";
                } nLast.equals( sbnLast.reverse().toString() ) nLast.equals nLast sbnLast.reverse().toString() sbnLast.reverse().toString sbnLast.reverse() sbnLast.reverse sbnLast {
                    result = "Yes";
                } result = "Yes" result "Yes" System.out.println( result ) System.out.println System.out System System.out result sc.close() sc.close sc String[] args args public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner( System.in );
        // 文字列S
        String s = sc.next();

        String result = "No";
        StringBuilder sbs = new StringBuilder( s );
        // 回文であるか
        if( s.equals( sbs.reverse().toString() ) ) {
            String n = s.substring( 0, ( s.length() - 1 ) / 2 );
//            System.out.println( "n:" + n );
            StringBuilder sbn = new StringBuilder( n );
            // 前の文字が回文であるか
            if( n.equals( sbn.reverse().toString() ) ) {
                String nLast = s.substring( ( s.length() - 1 ) / 2 + 1 );
 //               System.out.println( "nLast:" + nLast );
                StringBuilder sbnLast = new StringBuilder( nLast );
                // 前の文字が回文であるか
                if( nLast.equals( sbnLast.reverse().toString() ) ) {
                    result = "Yes";
                }
            }
        }
        System.out.println( result );

        sc.close();
    }
} public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner( System.in );
        // 文字列S
        String s = sc.next();

        String result = "No";
        StringBuilder sbs = new StringBuilder( s );
        // 回文であるか
        if( s.equals( sbs.reverse().toString() ) ) {
            String n = s.substring( 0, ( s.length() - 1 ) / 2 );
//            System.out.println( "n:" + n );
            StringBuilder sbn = new StringBuilder( n );
            // 前の文字が回文であるか
            if( n.equals( sbn.reverse().toString() ) ) {
                String nLast = s.substring( ( s.length() - 1 ) / 2 + 1 );
 //               System.out.println( "nLast:" + nLast );
                StringBuilder sbnLast = new StringBuilder( nLast );
                // 前の文字が回文であるか
                if( nLast.equals( sbnLast.reverse().toString() ) ) {
                    result = "Yes";
                }
            }
        }
        System.out.println( result );

        sc.close();
    }
} Main
import java.util.Scanner;

/**
 * B - String Palindrome
 * 長さが奇数である文字列 S が以下の条件をすべて満たすとき、S は「強い回文」であるといいます。
 *  ・S は回文である。
 *  ・N を S の長さとするとき、S の 1 文字目から (N−1)/2 文字目まで(両端含む)からなる文字列は回文である。
 *  ・S の (N+3)/2 文字目から N 文字目まで(両端含む)からなる文字列は回文である。
 * S が強い回文かどうかを判定してください。
 */
public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner( System.in );
        // 文字列S
        String s = sc.next();

        String result = "No";
        StringBuilder sbs = new StringBuilder( s );
        // 回文であるか
        if( s.equals( sbs.reverse().toString() ) ) {
            String n = s.substring( 0, ( s.length() - 1 ) / 2 );
//            System.out.println( "n:" + n );
            StringBuilder sbn = new StringBuilder( n );
            // 前の文字が回文であるか
            if( n.equals( sbn.reverse().toString() ) ) {
                String nLast = s.substring( ( s.length() - 1 ) / 2 + 1 );
 //               System.out.println( "nLast:" + nLast );
                StringBuilder sbnLast = new StringBuilder( nLast );
                // 前の文字が回文であるか
                if( nLast.equals( sbnLast.reverse().toString() ) ) {
                    result = "Yes";
                }
            }
        }
        System.out.println( result );

        sc.close();
    }
}