#include <bits/stdc++.h>
using namespace std;
const int N = 2010;
const int M = 998244353;
char str[N];
long long l_k[N];
long long r_k[N];
long long l_w[N];
long long r_w[N];
long long f[N][N];
long long ans = 0;
long long get_ans(long long u, long long a, long long b, long long c,
                  long long d) {
  if (u - c > d || u < c) return 0;
  int h = u - c;
  return u * f[d][h] % M * f[b][a] % M;
}
int main() {
  f[0][0] = 1;
  for (int i = 1; i < N; i++) {
    for (int j = 0; j < N; j++) {
      f[i][j] = (f[i - 1][j - 1] + f[i - 1][j]) % M;
    }
  }
  cin >> (str + 1);
  int len = strlen(str + 1);
  for (int i = 1; i <= len; i++) {
    if (str[i] == '(') {
      l_k[i] = l_k[i - 1] + 1;
    } else {
      l_k[i] = l_k[i - 1];
    }
    if (str[i] == '?') {
      l_w[i] = l_w[i - 1] + 1;
    } else {
      l_w[i] = l_w[i - 1];
    }
  }
  for (int i = len; i >= 1; i--) {
    if (str[i] == ')') {
      r_k[i] = r_k[i + 1] + 1;
    } else {
      r_k[i] = r_k[i + 1];
    }
    if (str[i] == '?') {
      r_w[i] = r_w[i + 1] + 1;
    } else {
      r_w[i] = r_w[i + 1];
    }
  }
  for (int i = 1; i <= len; i++) {
    if (str[i] == '(') {
      for (int j = l_k[i]; j <= (l_k[i] + l_w[i]); j++) {
        ans = (ans + get_ans(j, j - l_k[i], l_w[i], r_k[i], r_w[i])) % M;
      }
    } else if (str[i] == ')') {
      for (int j = l_k[i]; j <= (l_k[i] + l_w[i]); j++) {
        ans =
            (ans + get_ans(j, j - l_k[i], l_w[i], r_k[i + 1], r_w[i + 1])) % M;
      }
    } else {
      for (int j = l_k[i] + 1; j <= (l_k[i] + l_w[i - 1] + 1); j++) {
        ans = (ans +
               get_ans(j, j - (l_k[i] + 1), l_w[i - 1], r_k[i], r_w[i + 1])) %
              M;
      }
      for (int j = l_k[i]; j <= (l_k[i] + l_w[i - 1]); j++) {
        ans = (ans + get_ans(j, j - (l_k[i]), l_w[i - 1], r_k[i], r_w[i + 1])) %
              M;
      }
    }
  }
  cout << ans << endl;
}
