#include<bits/stdc++.h>

using namespace std;

#define pb push_back
#define mp make_pair
#define F first
#define S second
#define fo(i, n) for(int i = 1; i <= n; ++i)

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

const int N = 200200;
const int mod = 1e9 + 7;

int a[N];
int cnt[N];
int t[26][N * 4];

inline void upd(int id, int v, int tl, int tr, int p, int x)
{
	if(tl == tr)
	{
		t[id][v] += x;
		return;
	}
	int tm = tl + tr >> 1;
	if(p <= tm) upd(id, v + v, tl, tm, p, x);
	else upd(id, v + v + 1, tm + 1 ,tr, p, x);
	t[id][v] = t[id][v + v] + t[id][v + v + 1];
}

inline int get(int v, int tl, int tr, int l, int r)
{
	if(l > r) return 0;
	if(tl == l && tr == r)
	{
		int ret = 0;
		for(int i = 0; i < 26; ++i)
			ret += t[i][v];
		return ret;
	}
	int tm = tl + tr >> 1;
	return get(v + v, tl, tm, l, min(r, tm)) + get(v + v + 1, tm + 1, tr, max(tm + 1, l), r);
}

inline int get_first_val(int v, int tl, int tr)
{
	if(tl == tr)
	{
		for(int i = 0; i < 26; ++i)
			if(t[i][v] > 0)
				return i;
		return -1;
	}
	int tm = tl + tr >> 1;
	int sum = 0;
	for(int i = 0; i < 26; ++i)
		sum += t[i][v + v];
	if(sum > 0)
		return get_first_val(v + v, tl, tm);
	return get_first_val(v + v + 1, tm + 1, tr);
}

inline int get_first(int id, int v, int tl, int tr)
{
	if(tl == tr)
		return tl;
	int tm = tl + tr >> 1;
	if(t[id][v + v] > 0)
		return get_first(id, v + v, tl, tm);
	return get_first(id, v + v + 1, tm + 1, tr);
}

inline int get_last_val(int v, int tl, int tr)
{
	if(tl == tr)
	{
		for(int i = 0; i < 26; ++i)
			if(t[i][v] > 0)
				return i;
		return -1;
	}
	int tm = tl + tr >> 1;
	int sum = 0;
	for(int i = 0; i < 26; ++i)
		sum += t[i][v + v + 1];
	if(sum > 0)
		return get_last_val(v + v + 1, tm + 1, tr);
	return get_last_val(v + v, tl, tm);
}

inline int get_last(int id, int v, int tl, int tr)
{
	if(tl == tr)
		return tl;
	int tm = tl + tr >> 1;
	if(t[id][v + v + 1] > 0)
		return get_last(id, v + v + 1, tm + 1, tr);
	return get_last(id, v + v, tl, tm);
}


int main()
{        	
	string s;
	cin >> s;
	int n = s.length();
	for(int i = 0; i < n; ++i)
		a[i] = s[i] - 'a';
	for(int i = 0; i < n; ++i)	
		cnt[a[i]]++;
	int ind = -1;
	for(int i = 0; i < 26; ++i)
		if(cnt[i] % 2 == 1)
		{
			if(ind != -1) return cout << -1, 0;
			ind = i ;
		}
	//bbaaa
	if(ind != -1 && n % 2 == 0)
		return cout << -1, 0;
	if(ind == -1 && n % 2 == 1)
		return cout << -1, 0;
	ll ans = 0;
	for(int i = 0; i < n; ++i)
		upd(a[i], 1, 0, n - 1, i, +1); 
	for(int i = 0; i < n / 2; ++i)
	{
		int l = -1, r = -1;
		int c_l = get_first_val(1, 0, n - 1), c_r = get_last_val(1, 0, n - 1);
	//   cerr<<"! " << i << ' '<< char(c_l + 'a') << ' '<<char(c_r + 'a') << endl;
		if(c_l == c_r)
		{
			l = get_first(c_l, 1, 0, n - 1);
			upd(c_l, 1, 0, n - 1, l, -1);
			r = get_last(c_r, 1, 0, n - 1);
			upd(c_r, 1, 0, n - 1, r, -1);
		}
		else
		{
			l = get_first(c_l, 1, 0, n - 1);
			r = get_last(c_r, 1, 0, n - 1);
			int l_pair = get_last(c_l, 1, 0, n - 1);
			int r_pair = get_first(c_r, 1, 0, n - 1);
	//		cerr<<i << ' '<<get(1, 0, n - 1, l_pair, r) << ' '<<get(1, 0, n - 1, l, r_pair) << endl;
			if(get(1, 0, n - 1, l_pair, r) < get(1, 0, n - 1, l, r_pair))
			{
				ans += get(1, 0, n - 1, l_pair, r) - 1;
		      upd(c_l, 1, 0, n - 1, l, -1);
				upd(c_l, 1, 0, n - 1, l_pair, -1);
			}
			else
			{
				ans += get(1, 0, n - 1, l,  r_pair) - 1;
				upd(c_r, 1, 0, n - 1, r, -1);
				upd(c_r, 1, 0 , n - 1, r_pair, -1);
			}
		}
	}
	cout << ans;
	return 0;            
}

Measured memory_bytes: 83204