MOD = 998244353 s = input().strip() n = len(s) if n % 2 != 0: print(0) exit() from collections import defaultdict dp = defaultdict(int) dp[(0, 0)] = 1 for c in s: new_dp = defaultdict(int) for (lo_prev, hi_prev), cnt in dp.items(): if c == '.': # Try replacing with '(' new_lo = lo_prev + 1 new_hi = hi_prev + 1 new_lo_clamped = max(new_lo, 0) if new_hi >= 0: new_dp[(new_lo_clamped, new_hi)] = (new_dp[(new_lo_clamped, new_hi)] + cnt) % MOD # Try replacing with ')' new_lo = lo_prev - 1 new_hi = hi_prev - 1 new_lo_clamped = max(new_lo, 0) if new_hi >= 0: new_dp[(new_lo_clamped, new_hi)] = (new_dp[(new_lo_clamped, new_hi)] + cnt) % MOD # Try replacing with '?' new_lo = lo_prev - 1 new_hi = hi_prev + 1 new_lo_clamped = max(new_lo, 0) if new_hi >= 0: new_dp[(new_lo_clamped, new_hi)] = (new_dp[(new_lo_clamped, new_hi)] + cnt) % MOD else: if c == '(': new_lo = lo_prev + 1 new_hi = hi_prev + 1 elif c == ')': new_lo = lo_prev - 1 new_hi = hi_prev - 1 else: # '?' new_lo = lo_prev - 1 new_hi = hi_prev + 1 new_lo_clamped = max(new_lo, 0) if new_hi >= 0: new_dp[(new_lo_clamped, new_hi)] = (new_dp[(new_lo_clamped, new_hi)] + cnt) % MOD dp = new_dp total = 0 for (lo, hi), cnt in dp.items(): if lo <= 0 <= hi: total = (total + cnt) % MOD print(total)