1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int n,how_many_a,how_many_b;
ll res=0;
string s;
set<int>ocur_ap,ocur_bp,ocur_an,ocur_bn;

void solve(){
	string str='0'+s;
	int half=n/2;
	set<int>::const_iterator iter1,iter2;
	int it1,it2;

	for(int i=1;i<=half;++i)
		if(str[i]!=str[n-i+1]){
			if(str[i]=='a'){
				iter1=ocur_bp.upper_bound(i);
				iter2=ocur_an.upper_bound(-n+i-1);
				it1=*iter1;
				it2=-(*iter2);

				if(it1-i<=n-i+1-it2){
					res+=it1-i;

					str[i]='b';
					str[it1]='a';

					ocur_ap.erase(i);
					ocur_ap.insert(it1);
					ocur_bp.erase(it1);
					ocur_bp.insert(i);

					ocur_an.erase(-i);
					ocur_an.insert(-it1);
					ocur_bn.erase(-it1);
					ocur_bn.insert(-i);
				}
				else{
					res+=n-i+1-it2;

					str[n-i+1]='a';
					str[it2]='b';

					ocur_bp.erase(n-i+1);
					ocur_bp.insert(it2);
					ocur_ap.erase(it2);
					ocur_ap.insert(n-i+1);

					ocur_bn.erase(-n+i-1);
					ocur_bn.insert(-it2);
					ocur_an.erase(-it2);
					ocur_an.insert(-n+i-1);
				}

			}
			else if(str[i]=='b'){
				iter1=ocur_ap.upper_bound(i);
				iter2=ocur_bn.upper_bound(-n+i-1);
				it1=*iter1;
				it2=-(*iter2);

				if(it1-i<=n-i+1-it2){
					res+=it1-i;

					str[i]='a';
					str[it1]='b';

					ocur_bp.erase(i);
					ocur_bp.insert(it1);
					ocur_ap.erase(it1);
					ocur_ap.insert(i);

					ocur_bn.erase(-i);
					ocur_bn.insert(-it1);
					ocur_an.erase(-it1);
					ocur_an.insert(-i);
				}
				else{
					res+=n-i+1-it2;

					str[n-i+1]='b';
					str[it2]='a';

					ocur_ap.erase(n-i+1);
					ocur_ap.insert(it2);
					ocur_bp.erase(it2);
					ocur_bp.insert(n-i+1);

					ocur_an.erase(-n+i-1);
					ocur_an.insert(-it2);
					ocur_bn.erase(-it2);
					ocur_bn.insert(-n+i-1);
				}

			}
		}
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	cin>>s;
	n=s.size();
	for(int i=0;i<n;++i){
		if(s[i]=='a')
			++how_many_a;
		else
			++how_many_b;
	}

	if((how_many_a&1 and how_many_b&1) or (n%2==0 and (how_many_a&1 or how_many_b&1))){
		cout<<-1;
		exit(0);
	}
	for(int i=0;i<n;++i){
		if(s[i]=='a') ocur_ap.insert(i+1),ocur_an.insert(-i-1);
		else ocur_bp.insert(i+1),ocur_bn.insert(-i-1);
	}
	solve();
	cout<<res;
}