from collections.abc import Iterable def accum_dp1(xs: Iterable, f, op, e: int, size: int, init: Iterable, *, is_reset=True): dp = [e] * size for i, v in init: dp[i] = v for x in xs: pp = [e] * size if is_reset else dp.copy() dp, pp = pp, dp for i in range(size): for p, v in f(i, pp[i], x): if 0 <= p < size: dp[p] = op(dp[p], v) return dp MOD = 998244353 N = int(input()) A = list(map(int, input().split())) def f(i, v, x): return [(i-x, v), (i+x, v)] def op(a, b): return (a + b) % MOD size = 10010 offset = size // 2 dp = accum_dp1(A, f, op, 0, size, [(offset, 1)]) ans = 0 for i in range(size): x = i - offset ans += abs(x) * dp[i] ans %= MOD print(ans)