#include <iostream>
#include <vector>
#include <string>
#include <climits>
using namespace std;
int main() {
string s;
cin >> s;
int n = s.size();
// prefix: difference of '(' - ')' from the beginning to position i
vector<int> prefix(n + 1, 0);
for (int i = 0; i < n; ++i) {
prefix[i + 1] = prefix[i] + (s[i] == '(' ? 1 : -1);
}
// minPrefix: minimum value of prefix from the beginning to position i
vector<int> minPrefix(n + 1, 0);
minPrefix[0] = prefix[0];
for (int i = 1; i <= n; ++i) {
minPrefix[i] = min(minPrefix[i - 1], prefix[i]);
}
// minSuffix: minimum value of prefix from position i to the end
vector<int> minSuffix(n + 2, INT_MAX);
minSuffix[n + 1] = INT_MAX;
for (int i = n; i >= 0; --i) {
minSuffix[i] = min(minSuffix[i + 1], prefix[i]);
}
int ans = 0;
for (int i = 0; i < n; ++i) {
// flip the parenthesis at position i
int delta = (s[i] == '(' ? -2 : 2);
int total = prefix[n] + delta;
// The part before position i: prefix must always be >= 0
if (minPrefix[i] < 0) continue;
// The part after: after flipping, the minimum value must be >= 0
int after_min = minSuffix[i + 1] + delta;
if (after_min < 0) continue;
// The final total must be 0
if (total == 0) ans++;
}
cout << ans << endl;
return 0;
}