func_code_string: #include <bits/stdc++.h>   using namespace std;   string str;   void push(stack<pair<bool, int>>& stk, int offset) {     if (offset == 0) return;     pair<bool, int> cur;     if (stk.size() && stk.top().first)       cur = stk.top(), stk.pop(), stk.push({1, cur.second + offset});     else       stk.push({1, offset});   }   bool fix_stk(stack<pair<bool, int>>& stk) {     int offset = 0;     while (stk.size() && (stk.top().first || stk.top().second + offset < 0))       offset += stk.top().second * stk.top().first, stk.pop();     if (stk.size() == 0) return false;     pair<bool, int> cur = {0, stk.top().second + offset};     stk.pop();     push(stk, offset);     stk.push(cur);     return true;   }   bool operation(stack<pair<bool, int>>& stk, int idx) {     pair<bool, int> cur = {0, -1};     if (str[idx] ==  ? ) {       if (fix_stk(stk) == false) return false;       cur = stk.top();       stk.pop();       push(stk, 1);       stk.push({0, cur.second + 1});       if (cur.second - 1 >= 0) stk.push({0, cur.second - 1});     } else       push(stk, (str[idx] ==  ( ) - (str[idx] ==  ) ));     return true;   }   int solve(int idx) {     int ret = 0;     stack<pair<bool, int>> stk;     stk.push({0, 0});     while ((idx < str.size()) && stk.size()) {       if (operation(stk, idx) == false) return ret;       if (fix_stk(stk) == false) return ret;       ret += stk.top().second == 0;       idx++;     }     return ret;   }   int mine() {     int ret = 0;     for (int i = 0; i < str.size(); i++) ret += solve(i);     return ret;   }   int main() {     cin >> str;     cout << mine() << endl;     return 0;   }   