#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T read() {
  T f = 0, x = 0;
  char c = getchar();
  while (!isdigit(c)) f = c == '-', c = getchar();
  while (isdigit(c)) x = x * 10 + c - 48, c = getchar();
  return f ? -x : x;
}
namespace run {
const int N = 1e6 + 9, mod = 998244353;
inline int add(int x, int y) { return x + y >= mod ? x - mod + y : x + y; }
inline int sub(int x, int y) { return x >= y ? x - y : x + mod - y; }
inline int qpow(int x, int y) {
  int ret = 1;
  while (y) {
    if (y & 1) ret = 1LL * x * ret % mod;
    x = 1LL * x * x % mod, y >>= 1;
  }
  return ret;
}
int n, a[N], fac[N], ifac[N], mx, tax[N];
inline int C(int _n, int _m) {
  if (_n < 0 || _m < 0 || _n < _m) return 0;
  return 1LL * fac[_n] * ifac[_m] % mod * ifac[_n - _m] % mod;
}
int main() {
  n = read<int>();
  for (int i = 1; i <= n; i++) mx = max(mx, a[i] = read<int>());
  sort(a + 1, a + n + 1), fac[0] = ifac[0] = 1;
  for (int i = 1; i <= mx + n; i++) fac[i] = 1LL * fac[i - 1] * i % mod;
  ifac[mx + n] = qpow(fac[mx + n], mod - 2);
  for (int i = n + mx - 1; i >= 1; i--)
    ifac[i] = 1LL * ifac[i + 1] * (i + 1) % mod;
  int ans = 0;
  for (int t = 0, l = 0, sum = 0; t <= mx; t++) {
    if (t < sum) break;
    int tmp = t - sum;
    ans = add(sub(C(tmp + n - 1, n - 1), C(tmp + l - 1, n - 1)), ans);
    while (l + 1 <= n && a[l + 1] <= t) l++, tax[a[l] % n]++;
    sum += tax[t % n];
  }
  printf("%d\n", ans);
  return 0;
}
}  // namespace run
int main() { return run::main(); }
