#include <bits/stdc++.h>
using namespace std;
void Print(int _x) { printf("%d\n", _x); }
void Print(long long _x) { printf("%I64d\n", _x); }
template <typename T>
void Print(T _a[], int _s, int _t) {
  for (int i = _s; i <= _t; i++) cout << _a[i] << " ";
  cout << endl;
}
struct InputReader {
  static const int bs = 100000;
  char buf[bs];
  int p;
  inline InputReader() : p(bs) {}
  inline void Flush() {
    p = 0;
    fread(buf, 1, bs, stdin);
  }
  inline char C() {
    if (p >= bs) Flush();
    return buf[p++];
  }
  inline int Getnum() {
    char ch = C();
    while (ch < '0' || ch > '9') ch = C();
    return (int)(ch - '0');
  }
  inline int operator()() {
    int ans = 0;
    char ch = C();
    int fu = 1;
    while (ch < '0' || ch > '9') {
      if (ch == '-') fu = -1;
      ch = C();
    }
    while (ch >= '0' && ch <= '9') {
      ans *= 10;
      ans += ch - '0';
      ch = C();
    }
    return ans * fu;
  }
  inline long long Readll() {
    long long ans = 0LL;
    char ch = Getnum() + '0';
    while (ch >= '0' && ch <= '9') {
      ans *= 10LL;
      ans += ch - '0';
      ch = C();
    }
    return ans;
  }
  inline void Readstring(string &x) {
    x.clear();
    char ch = C();
    while (!isdigit(ch) && !isalpha(ch) && ch != '(' && ch != ')' && ch != '?')
      ch = C();
    int p = 0;
    while (isdigit(ch) || isalpha(ch) || ch == '(' || ch == ')' || ch == '?') {
      x += ch;
      ch = C();
      p++;
    }
    x[p] = '\0';
  }
  inline char Specialread() {
    char ch = C();
    while (ch != '+' && ch != '?') ch = C();
    return ch;
  }
} In;
inline void Read(int &x) { x = In(); }
inline void Read(int &x, int &y) {
  x = In();
  y = In();
}
inline void Read(int &x1, int &x2, int &x3) {
  x1 = In();
  x2 = In();
  x3 = In();
}
inline void Read(int &x1, int &x2, int &x3, int &x4) {
  x1 = In();
  x2 = In();
  x3 = In();
  x4 = In();
}
inline void Read(long long &x) { x = In.Readll(); }
clock_t _starttime, _endtime;
inline void FILEIO() {}
inline void END() { exit(0); }
int n;
int s[5010];
int Solve() {
  int ans = 0;
  for (int(i) = 1; (i) <= (n); (i)++) {
    int maxneed, minneed;
    int tans;
    maxneed = minneed = tans = 0;
    for (int(j) = (i); (j) <= (n); (j)++) {
      if (s[j] == 1) {
        minneed++;
        maxneed++;
      }
      if (s[j] == 2) {
        if (maxneed == 0) break;
        minneed--;
        if (minneed < 0) minneed = 0;
        ;
        maxneed--;
        if (maxneed < 0) maxneed = 0;
        ;
      }
      if (s[j] == 3) {
        minneed--;
        if (minneed < 0) minneed = 0;
        ;
        maxneed++;
      }
      if (minneed == 0 && (j - i + 1) % 2 == 0) {
        tans++;
      }
    }
    ans += tans;
  }
  return ans;
}
int main() {
  FILEIO();
  string ss;
  In.Readstring(ss);
  n = ss.length();
  for (int(i) = 0; (i) < (n); (i)++) {
    if (ss[i] == '(') s[i + 1] = 1;
    if (ss[i] == ')') s[i + 1] = 2;
    if (ss[i] == '?') s[i + 1] = 3;
  }
  int ans = Solve();
  printf("%d\n", ans);
  END();
}
