import sys from collections import defaultdict, deque MOD = 998244353 def main(): input = sys.stdin.read().split() n = int(input[0]) s = list(map(int, input[1:n+1])) count = defaultdict(int) for num in s: count[num] += 1 max_num = max(count.keys()) if count else 0 state = tuple(sorted(count.items())) visited = set() queue = deque([state]) visited.add(state) result = 0 while queue: current = queue.popleft() result += 1 current_dict = dict(current) elements = list(current_dict.keys()) elements.sort() m = 0 while m in current_dict: m += 1 subset = [] for x in elements: if x < m: subset.append(x) from itertools import combinations def generate_subsets(elements, counts): subset = [] for x in elements: if counts.get(x, 0) > 0: subset.append(x) n = len(subset) masks = [1 << i for i in range(n)] for mask in range(1, 1 << n): selected = [] for i in range(n): if mask & masks[i]: selected.append(subset[i]) yield selected for selected in generate_subsets(elements, current_dict): temp_dict = current_dict.copy() for x in selected: temp_dict[x] -= 1 if temp_dict[x] == 0: del temp_dict[x] mex = 0 while mex in selected: mex += 1 temp_dict[mex] = temp_dict.get(mex, 0) + 1 new_state_items = sorted(temp_dict.items()) new_state = tuple(new_state_items) if new_state not in visited: visited.add(new_state) queue.append(new_state) print(result % MOD) if __name__ == "__main__": main()