#include #include #include #include using namespace std; unsigned long long int fac( unsigned long long int n ) { unsigned long long int tmp = 1; for (unsigned long long int i = 1; i <= n; i++) { for (unsigned long long int j = i; j < (n-1); ++j) { tmp += (n - j); } } if (n % 2 == 0) { tmp++; } return tmp; } int main() { string input; unsigned long long int N = 0; cin >> N >> input; unsigned long long int power = sqrt(N); unsigned long long int X = 8; unsigned long long int O = 1; unsigned long long int next = 3; vector> table; pair tmp_pair; tmp_pair = make_pair(X, O); table.push_back(tmp_pair); // X a O for (unsigned long long int i = 3; i < power; ++i) { X += 4; O += next; next += 2; tmp_pair = make_pair(X, O); table.push_back(tmp_pair); } unsigned long long int count_O = 0; unsigned long long int count_X = 0; for(unsigned long long int i = 0; i < input.length(); ++i) { if(input[i] == 'X') count_X++; else count_O++; } unsigned long long int sum = table.size(); // default unsigned long long int res_X; unsigned long long int res_O; if( count_X >= table[table.size()-1].first && count_O >= table[table.size()-1].second ){ for (unsigned long long int i = 0; i < table.size(); ++i) { res_X = count_X - table[i].first; res_O = count_O - table[i].second; if (count_X == table[table.size()-1].first || count_O == table[table.size()-1].second) { sum += res_X + res_O; } else { if (res_X == 1) { res_X = 1; } else { res_X = fac(res_X) + 1; } if (res_O == 1) { res_O = 1; } else { res_O = fac(res_O) + 1; } sum += res_X + res_O; } } cout << sum << endl; } else cout << 0 << endl; return 0; }