#include <bits/stdc++.h>
using namespace std;
const int INF = 1000 * 1000 * 1000 + 7;
const long long LINF = INF * (long long)INF;
const int mod = 998244353;
const int MAX = 2 * 1000 * 100 + 5;
int add(int a, int b) { return a + b >= mod ? a + b - mod : a + b; }
int mult(int a, int b) { return a * (long long)b % mod; }
int sub(int a, int b) { return a - b < 0 ? a - b + mod : a - b; }
void Add(int &a, int b) { a = add(a, b); }
int modPow(int a, int step) {
  int ans = 1;
  while (step) {
    if (step & 1) ans = mult(ans, a);
    a = mult(a, a);
    step >>= 1;
  }
  return ans;
}
int dp[2][2005][2005];
int ans[2005];
int main() {
  ios_base::sync_with_stdio(0);
  string s;
  cin >> s;
  dp[0][0][0] = dp[1][0][0] = 1;
  char c1 = '(', c2 = ')';
  for (int it = 0; it < 2; it++) {
    for (int i = 0; i < (int)(s.size()); i++) {
      for (int j = 0; j <= i; j++) {
        if (s[i] == c1) {
          Add(dp[it][i + 1][j + 1], dp[it][i][j]);
        } else if (s[i] == c2) {
          Add(dp[it][i + 1][j], dp[it][i][j]);
        } else {
          Add(dp[it][i + 1][j + 1], dp[it][i][j]);
          Add(dp[it][i + 1][j], dp[it][i][j]);
        }
      }
    }
    swap(c1, c2);
    reverse(s.begin(), s.end());
  }
  for (int i = 0; i < (int)(s.size()); i++)
    for (int j = (int)(s.size()) - 1; j >= 0; j--)
      Add(dp[1][i][j], dp[1][i][j + 1]);
  for (int i = 0; i < (int)(s.size()); i++) {
    if (s[i] == ')') continue;
    for (int j = 0; j <= (int)(s.size()); j++)
      Add(ans[j + 1],
          mult(dp[0][i][j], dp[1][(int)(s.size()) - (i + 1)][j + 1]));
  }
  int res = 0;
  for (int i = (int)(s.size()); i > 0; i--)
    res = add(res, mult(i, sub(ans[i], ans[i + 1])));
  cout << res;
  return 0;
}
