#include <iostream>
#include <string>
#include <vector>
#include <climits>
using namespace std;
// Checks if the input string is valid: contains only '(' and ')', and length is within bounds
bool isValidInput(const string& s) {
const int MAX_LENGTH = 100000;
if (s.empty() || s.size() > MAX_LENGTH) {
return false;
}
for (char c : s) {
if (c != '(' && c != ')') {
return false;
}
}
return true;
}
// Checks if flipping the parenthesis at position pos results in a valid sequence
bool isValidAfterFlip(const string& s, int pos) {
int n = s.size();
int balance = 0;
// Simulate balance for the entire string after flipping
for (int i = 0; i < n; ++i) {
if (i == pos) {
balance += (s[i] == '(' ? -1 : 1); // Flip '(' to ')' (-1), ')' to '(' (+1)
} else {
balance += (s[i] == '(' ? 1 : -1); // Normal contribution
}
if (balance < 0) { // Invalid if balance goes negative
return false;
}
}
return balance == 0; // Valid sequence must end with balance = 0
}
// Counts the number of valid sequences by flipping exactly one parenthesis
int countValidFlips(const string& s) {
int n = s.size();
if (n % 2 != 0) {
return 0; // Valid sequence must have even length
}
// Count valid flips
int validCount = 0;
for (int i = 0; i < n; ++i) {
if (isValidAfterFlip(s, i)) {
validCount++;
}
}
return validCount;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s;
cin >> s;
// Validate input
if (!isValidInput(s)) {
cout << "Invalid input\n";
return 1;
}
// Output the result
cout << countValidFlips(s) << '\n';
return 0;
}