# https://yukicoder.me/problems/no/2792 MOD = 998244353 class CombinationCalculator: """ modを考慮したPermutation, Combinationを計算するためのクラス """ def __init__(self, size, mod): self.mod = mod self.factorial = [0] * (size + 1) self.factorial[0] = 1 for i in range(1, size + 1): self.factorial[i] = (i * self.factorial[i - 1]) % self.mod self.inv_factorial = [0] * (size + 1) self.inv_factorial[size] = pow(self.factorial[size], self.mod - 2, self.mod) for i in reversed(range(size)): self.inv_factorial[i] = ((i + 1) * self.inv_factorial[i + 1]) % self.mod def calc_combination(self, n, r): if n < 0 or n < r or r < 0: return 0 if r == 0 or n == r: return 1 ans = self.inv_factorial[n - r] * self.inv_factorial[r] ans %= self.mod ans *= self.factorial[n] ans %= self.mod return ans def calc_permutation(self, n, r): if n < 0 or n < r: return 0 ans = self.inv_factorial[n - r] ans *= self.factorial[n] ans %= self.mod return ans def main(): N = int(input()) A = list(map(int ,input().split())) a_map = {} for a in A: if a not in a_map: a_map[a] = 0 a_map[a] += 1 a_array = [(a, v) for a, v in a_map.items()] a_array.sort(key=lambda x : x[0], reverse=True) combi = CombinationCalculator(N + max(A), MOD) answer = 0 height = 0 for index in range(len(a_array)): if index == 0: start = a_array[index][0] height += a_array[index][1] end =0 if index < len(a_array) - 1: end = a_array[index + 1][0] answer += combi.calc_combination(start + height - 1, start) answer %= MOD for j in reversed(range(end, start)): answer += combi.calc_combination(j + height - 1, j) answer %= MOD else: start = a_array[index][0] end = 0 if index < len(a_array) - 1: end = a_array[index + 1][0] for h in range(height, height + a_array[index][1]): answer += combi.calc_combination(start - 1 + h, start - 1) answer %= MOD height += a_array[index][1] for j in reversed(range(end, start)): answer += combi.calc_combination(j + height - 1, j) answer %= MOD print(answer) if __name__ == "__main__": main()