## https://yukicoder.me/problems/no/3424 import itertools MOD = 998244353 def main(): N, A, B, C = map(int, input().split()) def prod(x, y): ans = A * (x & y) ans += B * (x | y) ans += C * (x ^ y) return ans % 4 # 合成関数たちの合成をするとどうなるかを見る functions = [] for i in range(4): for j in range(4): for k in range(4): for l in range(4): functions.append((i, j, k, l)) # g(x) = f1(f2(x))がどうなるかを見る funcs_map = {} for fun1 in functions: for fun2 in functions: answer = [0, 0, 0, 0] for x in range(4): answer[x] = fun1[fun2[x]] funcs_map[(fun1, fun2)] = tuple(answer) # f_y(x) = x * yで定義される関数がどんなものかを見る base_funcs = [] for y in range(4): answer = [prod(x, y) for x in range(4)] base_funcs.append(tuple(answer)) dp = {} for x in range(4): b = base_funcs[x] key = (x, b[0], b[1], b[2], b[3]) dp[key] = 1 for _ in range(N - 2): new_dp = {} for state, value in dp.items(): forward = state[0] back_func = tuple(state[1:]) for x in range(4): new_forward = prod(forward, x) new_back_func = funcs_map[(back_func, base_funcs[x])] new_state = (new_forward, new_back_func[0], new_back_func[1], new_back_func[2], new_back_func[3]) if new_state not in new_dp: new_dp[new_state] = 0 new_dp[new_state] += value new_dp[new_state] %= MOD dp = new_dp answer = 0 for state, value in dp.items(): forward = state[0] back_func = tuple(state[1:]) for x in range(4): if prod(forward, x) == back_func[x]: answer += value answer %= MOD print(answer) if __name__ == "__main__": main()