#include <bits/stdc++.h>
using namespace std;
template <class T>
bool uin(T &a, T b) {
  return a > b ? (a = b, true) : false;
}
template <class T>
bool uax(T &a, T b) {
  return a < b ? (a = b, true) : false;
}
const int maxn = 2100;
const int P = 998244353;
pair<int, int> dp[2][maxn][maxn];
pair<int, int> operator+(pair<int, int> a, pair<int, int> b) {
  return {(a.first + b.first) % P, (a.second + b.second) % P};
}
pair<int, int> xplus(pair<int, int> a) {
  return {a.first, (a.second + a.first) % P};
}
string s;
pair<int, int> get_dp(int l, int r, int z) {
  if (l == r) return {1, 0};
  if (dp[z][l][r] != make_pair(-1, -1)) return dp[z][l][r];
  auto &res = dp[z][l][r];
  res = {0, 0};
  if (!z) {
    if (s[l] != '(') res = res + get_dp(l + 1, r, 0);
    if (s[l] != ')') res = res + get_dp(l + 1, r, 1);
  } else {
    if (s[r - 1] != '(') res = res + xplus(get_dp(l, r - 1, 0));
    if (s[r - 1] != ')') res = res + get_dp(l, r - 1, 1);
  }
  return res;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.precision(10);
  cout << fixed;
  cin >> s;
  int n = s.size();
  for (int z = 0; z < (int)(2); ++z)
    for (int i = 0; i < (int)(n + 1); ++i)
      for (int j = 0; j < (int)(n + 1); ++j) dp[z][i][j] = {-1, -1};
  cout << get_dp(0, n, 0).second << '\n';
  return 0;
}
