# https://yukicoder.me/problems/no/2219 MOD = 998244353 def main(): S = input() backword_list = [[0, 0] for _ in range(len(S))] b = [0, 0] for i in reversed(range(len(S))): for j in range(2): backword_list[i][j] = b[j] if S[i] == "0": b[0] += 1 elif S[i] == "?": b[1] += 1 f = [0, 0] answer = 0 for i in range(len(S)): if S[i] in ("1" , "?"): f0 = (f[0] * pow(2, f[1], MOD)) % MOD f0 += (f[1] * pow(2, f[1] - 1, MOD)) % MOD f0 %= MOD b = backword_list[i] b0 = (b[0] * pow(2, b[1], MOD)) % MOD b0 += (b[1] * pow(2, b[1] - 1, MOD)) % MOD b0 %= MOD ans = (f0 * b0) % MOD answer += ans answer %= MOD if S[i] == "0": f[0] += 1 elif S[i] == "?": f[1] += 1 print(answer) if __name__ == "__main__": main()