MOD = 998244353 from collections import defaultdict s = input().strip() n = len(s) current_dp = defaultdict(int) current_dp[(0, 0)] = 1 for i in range(n): next_dp = defaultdict(int) c = s[i] replacements = [] if c == '.': replacements = ['(', ')', '?'] else: replacements = [c] for (lo_prev, hi_prev), count in current_dp.items(): for char in replacements: if char == '(': new_lo = lo_prev + 1 new_hi = hi_prev + 1 elif char == ')': 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 >= new_lo_clamped: next_dp[(new_lo_clamped, new_hi)] = (next_dp[(new_lo_clamped, new_hi)] + count) % MOD current_dp = next_dp result = 0 for (lo, hi), cnt in current_dp.items(): if lo <= 0 <= hi: result = (result + cnt) % MOD print(result)