#include <bits/stdc++.h>
#define FOR(i, a, b) for(int i=(a);i<(b);++i)
#define REP(i, n)  for(int i=0;i<(n);++i)
#define REPr(i, n) for(int i=(n)-1;i>=0; --i)
#define FORq(i, m, n) for(int i = (m);i <= (n);++i)
#define FORqr(i, m, n) for(int i = (n);i >=(m);--i)
#define PB push_back
#define MP make_pair
#define DEBUG printf("%s\n","debug")
#define fst first
#define snd second
#define SIN(x, S) (S.count(x) != 0)
#define M0(x) memset(x,0,sizeof(x))
#define FILL(x, y) memset(x,y,sizeof(x))
#define MM(x) memset(x,-1,sizeof(x))
#define ALL(x) (x).begin(),(x).end()
#define SCD(n) scanf("%d",&n)
#define SCD2(m,n) scanf("%d%d",&m,&n)
#define SCD3(m,n,k) scanf("%d%d%d",&m,&n,&k)
#define SCLLD(n) scanf("%lld",&n)
#define SCLLD2(m,n) scanf("%lld%lld",&m,&n)
#define SCLLD3(m,n,k) scanf("%lld%lld%lld",&m,&n,&k)
using namespace std;
typedef pair<int, int> PII;
typedef pair<long long, long long> PLL;
typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<long long> VL;
typedef long long ll;
typedef long long integer;
///////////////////////////////////////////////
const ll MOD = 1e9+7;
ll gcd(ll x, ll y) { return y ? gcd(y, x % y) : x; }
template<class T>
inline bool chmin(T &a, T b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}
template<class T>
inline bool chmax(T &a, T b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
}

template<int MOD> struct Fp {
    long long val;
    constexpr Fp(long long v = 0) noexcept : val(v % MOD) {
        if (val < 0) v += MOD;
    }
    constexpr int getmod() { return MOD; }
    constexpr Fp operator - () const noexcept {
        return val ? MOD - val : 0;
    }
    constexpr Fp operator + (const Fp& r) const noexcept { return Fp(*this) += r; }
    constexpr Fp operator - (const Fp& r) const noexcept { return Fp(*this) -= r; }
    constexpr Fp operator * (const Fp& r) const noexcept { return Fp(*this) *= r; }
    constexpr Fp operator / (const Fp& r) const noexcept { return Fp(*this) /= r; }
    constexpr Fp& operator += (const Fp& r) noexcept {
        val += r.val;
        if (val >= MOD) val -= MOD;
        return *this;
    }
    constexpr Fp& operator -= (const Fp& r) noexcept {
        val -= r.val;
        if (val < 0) val += MOD;
        return *this;
    }
    constexpr Fp& operator *= (const Fp& r) noexcept {
        val = val * r.val % MOD;
        return *this;
    }
    constexpr Fp& operator /= (const Fp& r) noexcept {
        long long a = r.val, b = MOD, u = 1, v = 0;
        while (b) {
            long long t = a / b;
            a -= t * b; swap(a, b);
            u -= t * v; swap(u, v);
        }
        val = val * u % MOD;
        if (val < 0) val += MOD;
        return *this;
    }
    constexpr bool operator == (const Fp& r) const noexcept {
        return this->val == r.val;
    }
    constexpr bool operator != (const Fp& r) const noexcept {
        return this->val != r.val;
    }
    friend constexpr ostream& operator << (ostream &os, const Fp<MOD>& x) noexcept {
        return os << x.val;
    }
    friend constexpr istream& operator >> (istream &is, Fp<MOD>& x) noexcept {
        return is >> x.val;
    }
    friend constexpr Fp<MOD> modpow(const Fp<MOD> &a, long long n) noexcept {
        if (n == 0) return 1;
        auto t = modpow(a, n / 2);
        t = t * t;
        if (n & 1) t = t * a;
        return t;
    }
};

///////////////////////////////////////////////

int main(){
    string S; cin >> S;
    string T;
    int N = S.length();

    REP(i,N){
        if (S[i] != 'x') T.PB(S[i]);
    }

    string T2 = T; reverse(ALL(T2));

    if (T == ""){
        cout << 0 << endl;
        return 0;
    }
    int M = T.length();
    REP(i,M){
        if (T[i] != T2[i]){
            cout << -1 << endl;
            return 0;
        }
    }
    int pos = 0;
    int ans = 0;
    S = '@' + S + '@';

    if (M % 2 == 1){
        pos = M / 2 + 1;
        int pivot = 0;
        REP(i,N+2){
            if (S[i] == '@') continue;
            if (S[i] == 'x') continue;
            pos--;
            if (pos == 0){
                pivot = i;
                break;
            }
        }

        //cout << pivot << endl;
        int left = pivot - 1;
        int right = pivot + 1;
        while(true){
            if ((left == 0) and (right == N+1)) break;
            if (S[left] == S[right]){
                left--; right++;
            }else if(S[left] == 'x'){
                left--;
                ans++;
            }else if(S[right] == 'x'){
                right++;
                ans++;
            }
        }

    }else{
        pos = M / 2;
        int left,right;
        REP(i,N+2){
            if (S[i] == '@') continue;
            if (S[i] == 'x') continue;
            pos--;
            if (pos == 0){
               left = i;
            }else if (pos == -1){
                right = i;
            }
        }

        while(true){
            if ((left == 0) and (right == N+1)) break;
            if (S[left] == S[right]){
                left--; right++;
            }else if(S[left] == 'x'){
                left--;
                ans++;
            }else if(S[right] == 'x'){
                right++;
                ans++;
            }
        }
    }

    cout << ans << endl;

}

Measured memory_bytes: 640