#include #include #include using namespace std; int main() { string S; cin >> S; int N = S.length(); S = "0" + S; // Pythonのような文字列結合 vector A(N + 1, 0); vector B(N + 1, 0); for (int i = 1; i <= N; i++) { if (S[i] == '^') { A[i] = A[i - 1] + 1; B[i] = B[i - 1]; } else if (S[i] == '*') { A[i] = A[i - 1]; B[i] = B[i - 1] + 1; } else { A[i] = A[i - 1]; B[i] = B[i - 1]; } } int ans1 = 0, ans2 = 0; for (int i = 1; i <= N - 4; i++) { if (S[i] == '(') { for (int j = i + 4; j <= N; j++) { if (S[j] == ')') { // 最初の二分探索 int high = j; int low = i; while (high - low > 1) { int mid = (high + low) / 2; if (A[mid] - A[i] >= 2) { high = mid; } else { low = mid; } } if (A[high] - A[i] >= 2 && B[j] - B[high] >= 1) { ans1++; } // 2回目の二分探索 high = j; low = i; while (high - low > 1) { int mid = (high + low) / 2; if (A[j] - A[mid] >= 2) { low = mid; } else { high = mid; } } if (A[j] - A[low] >= 2 && B[low] - B[i] >= 1) { ans2++; } } } } } cout << ans1 << " " << ans2 << endl; return 0; }