Problem:
Score : 400 points

Problem Statement

We have a string s consisting of lowercase English letters.
Snuke can perform the following operation repeatedly:

Insert a letter x to any position in s of his choice, including the beginning and end of s.

Snuke's objective is to turn s into a palindrome.
Determine whether the objective is achievable. If it is achievable, find the minimum number of operations required.

Notes

A palindrome is a string that reads the same forward and backward.
For example, a, aa, abba and abcba are palindromes, while ab, abab and abcda are not.

Constraints

1 \leq |s| \leq 10^5

s consists of lowercase English letters.

Input

Input is given from Standard Input in the following format:

s

Output

If the objective is achievable, print the number of operations required.
If it is not, print -1 instead.

Sample Input 1

xabxa

Sample Output 1

2

One solution is as follows (newly inserted x are shown in bold):

xabxa → xaxbxa → xaxbxax

Sample Input 2

ab

Sample Output 2

-1

No sequence of operations can turn s into a palindrome.

Sample Input 3

a

Sample Output 3

0

s is a palindrome already at the beginning.

Sample Input 4

oxxx

Sample Output 4

3

One solution is as follows:

oxxx → xoxxx → xxoxxx → xxxoxxx

Solution in C (GCC 5.4.1) (judge verdict: Accepted)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define df 0
#define MAX 100010
int dc=100000;
int dist(int a,int b){
  return (a<b)?b-a:a-b;
}

int main(){
  if(df)printf("*** debug mode ***\n");
  char s[MAX],d[MAX];
  int idx[MAX],i;
  scanf(" %s",s);
  int len=strlen(s);
  if(df)printf("%s:%d\n",s,len) ;
  int j=0;
  idx[0]=-1;
  for(i=0;i<len;i++){
    if(s[i]!='x'){
      d[j]=s[i];
      idx[j+1]=i;
      j++;
    }
  }
  if(df)printf("\n");
  idx[j+1]=len;
  int d_len=j,flag=1,m=(1+d_len)/2;
  if(df){
    for(i=0;i<d_len;i++){
      printf("%c",d[i]);
    }
    printf("\n");
    for(i=0;i<d_len+2;i++){
      printf("%d",idx[i]);
    }
    printf("\n");
  }
  for(i=0;i<d_len;i++){
    if(d[i]!=d[d_len-i-1])flag=0;
  }
  if(flag==0){
    printf("-1");
    return 0;
  }
  int sum=0;
  for(i=0;i<m;i++){
    sum+=dist(idx[i+1]-idx[i],idx[d_len-i+1]-idx[d_len-i]);
  }
  

  printf("%d",sum);
  return 0;
}


/// confirm df==0 ///