#include <bits/stdc++.h>
using namespace std;
const long long MOD = 998244353;
char S[100005];
int N;
long long pow2[100005];
int prefixSum[100005];
int val[256];
int memo[2005][2005][3][3];
int cntQ(int i, int j) {
  if (i > j) {
    return 0;
  }
  return prefixSum[j + 1] - prefixSum[i];
}
long long dp(int i, int j, char chL, char chR) {
  if (i >= j) {
    return 0;
  }
  if (i + 1 == j) {
    return chL != ')' && chR != '(';
  }
  int dirX = val[chL];
  int dirY = val[chR];
  if (memo[i][j][dirX][dirY] != -1) {
    return memo[i][j][dirX][dirY];
  } else {
    long long ans = 0;
    if (chL != ')' && chR != '(') {
      ans += pow2[cntQ(i + 1, j - 1)] + dp(i + 1, j - 1, S[i + 1], S[j - 1]);
    }
    if (chL != ')' && chR != ')') {
      ans += dp(i, j - 1, '(', S[j - 1]);
    }
    if (chL != '(' && chR != '(') {
      ans += dp(i + 1, j, S[i + 1], ')');
    }
    if (chL != '(' && chR != ')') {
      ans += dp(i + 1, j - 1, S[i + 1], S[j - 1]);
    }
    ans %= MOD;
    memo[i][j][dirX][dirY] = ans;
    return ans;
  }
}
int main() {
  scanf(" %s", S);
  N = strlen(S);
  val['('] = 0;
  val[')'] = 1;
  val['?'] = 2;
  pow2[0] = 1;
  for (int i = 1; i <= N; i++) {
    pow2[i] = (pow2[i - 1] << 1) % MOD;
  }
  prefixSum[0] = 0;
  for (int i = 1; i <= N; i++) {
    prefixSum[i] = prefixSum[i - 1] + (S[i - 1] == '?');
  }
  memset(memo, -1, sizeof(memo));
  printf("%lld\n", dp(0, N - 1, S[0], S[N - 1]));
  return 0;
}
