def change(index, value): diff = value - dp[0][index] for i in range(1 + N // 2): for j in range(2 ** i): dp[i][j ^ index] += diff * p(11, 2 ** i - j - 1) * p(2, j) dp[i][j ^ index] %= mod def calc(L, R, X): if L == R: return 0 temp = 1 key = 0 while L % temp == 0 and R - L >= temp and key < N // 2 + 1: temp *= 2 key += 1 temp //= 2 return (dp[key - 1][X ^ L] * p(11, R - L - temp) + calc(L + temp, R, X) * p(2, temp)) % mod def p(a, r): rem = r % (mod - 1) ans = 1 while rem: if rem%2: ans = (ans * a) % mod rem //= 2 a = (a * a) % mod return ans N = int(input()) S = list(map(int, list(input()))) Q = int(input()) mod = 998244353 dp = [[0 for i in range(2 ** N)] for j in range(1 + N // 2)] query = [[1, i, S[i]] for i in range(2 ** N)] + [list(map(int, input().split())) for i in range(Q)] for q in query: if q[0] == 1: change(*q[1:]) else: print(calc(q[1], q[2] + 1, q[3]))