import itertools import sys from typing import Literal ROW_COUNT = 341_799 MOD = 998_244_353 PatternCharType = Literal[0, 1] def get_pattern_multiplier(pattern: tuple[PatternCharType, PatternCharType, PatternCharType]) -> int: match pattern: case (0, 0, 0) | (0, 0, 1) | (1, 0, 0) | (0, 1, 0) | (1, 0, 1): return 21 * 21 case (0, 1, 1) | (1, 1, 0): return 21 * 26 case (1, 1, 1): return 26 * 26 case _: raise ValueError(f"Unknown pattern: {pattern}") dp: dict[PatternCharType, list[tuple[int, int]]] = {0: [(-1, -1), (5, 0)], 1: [(-1, -1), (0, 21)]} for _ in range(ROW_COUNT - 1): for c in 0, 1: dp[c].append((dp[c][-1][1] * 5 % MOD, (dp[c][-1][0] + dp[c][-1][1]) * 21 % MOD)) answer = 0 for pattern1 in itertools.product([0, 1], repeat=3): for pattern2 in itertools.product([0, 1], repeat=3): # noinspection PyTypeChecker answer += dp[pattern1[0]][ROW_COUNT][pattern2[0]] \ * dp[pattern1[1]][ROW_COUNT][pattern2[1]] \ * dp[pattern1[2]][ROW_COUNT][pattern2[2]] \ * get_pattern_multiplier(pattern1) \ * get_pattern_multiplier(pattern2) \ % MOD print(dp[0][:100], dp[1][:100], file=sys.stderr, sep="\n") print(answer % MOD)