## https://yukicoder.me/problems/no/1677 import sys sys.setrecursionlimit(201000) MOD = 998244353 def calc_mex(x, y): for j in range(3): if j != x and j != y: return j def main(): S = input() K = int(input()) def dfs(S, index): if index + 4 <= len(S): s = S[index:(index + 4)] if s == "m?x(": new_dp = [0] * 3 dp1, index = dfs(S, index + 4) dp2, index = dfs(S, index + 1) for i in range(3): for j in range(3): k = calc_mex(i, j) new_dp[k] += (dp1[i] * dp2[j]) % MOD new_dp[k] %= MOD k = max(i, j) new_dp[k] += (dp1[i] * dp2[j]) % MOD new_dp[k] %= MOD return new_dp, index + 1 elif s == "mex(": new_dp = [0] * 3 dp1, index = dfs(S, index + 4) dp2, index = dfs(S, index + 1) for i in range(3): for j in range(3): k = calc_mex(i, j) new_dp[k] += (dp1[i] * dp2[j]) % MOD new_dp[k] %= MOD return new_dp, index + 1 elif s == "max(": new_dp = [0] * 3 dp1, index = dfs(S, index + 4) dp2, index = dfs(S, index + 1) for i in range(3): for j in range(3): k = max(i, j) new_dp[k] += (dp1[i] * dp2[j]) % MOD new_dp[k] %= MOD return new_dp, index + 1 if index < len(S): dp = [0] * 3 s = S[index] for x in range(3): if s in ("?", str(x)): dp[x] += 1 return dp, index + 1 dp, _ = dfs(S, 0) print(dp[K]) if __name__ == "__main__": main()