#include <bits/stdc++.h>
using namespace std;
const int MOD = 998244353;
const int A = 1000006;
const int K = 100005;
long long ans = 1;
int k, Max;
int a[K];
int c1[A], low[A];
int jc[A], inv[A];
long long Pow(long long x, int p) {
  if (p == 0) return 1;
  if (p % 2 == 0) return Pow((x * x) % MOD, p / 2);
  return (x * Pow((x * x) % MOD, p / 2)) % MOD;
}
void Init(int lim) {
  jc[1] = inv[0] = 1;
  for (long long i = 2; i <= lim; i++) jc[i] = (i * jc[i - 1]) % MOD;
  inv[lim] = Pow(jc[lim], MOD - 2);
  for (long long i = lim - 1; i >= 1; i--)
    inv[i] = ((i + 1) * inv[i + 1]) % MOD;
}
inline int C(int n, int m) {
  return (((long long)jc[n] * inv[m]) % MOD * inv[n - m]) % MOD;
}
int main() {
  scanf("%d", &k);
  for (int i = 1; i <= k; i++) {
    scanf("%d", &a[i]);
    Max = max(a[i], Max);
    c1[a[i] + 1]++;
  }
  Init(Max + k);
  for (int i = 1; i <= k; i++)
    for (int j = 0; a[i] + j * k + 1 <= Max; j++) low[a[i] + j * k + 1]++;
  for (int sig = 1; sig <= Max; sig++) {
    low[sig] += low[sig - 1];
    c1[sig] += c1[sig - 1];
    int s = sig - low[sig];
    if (s < 0) break;
    int c0 = k - c1[sig];
    ans += C(s + k - 1, k - 1);
    if (s >= c0) ans += MOD - C(s - c0 + k - 1, k - 1);
    while (ans >= MOD) ans -= MOD;
  }
  printf("%lld\n", ans);
  return 0;
}
