#include <bits/stdc++.h>
long long gi() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) f ^= ch == '-', ch = getchar();
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  return f ? x : -x;
}
std::mt19937 rnd(time(NULL));
template <class T>
void cxk(T& a, T b) {
  a = a > b ? a : b;
}
template <class T>
void cnk(T& a, T b) {
  a = a < b ? a : b;
}
int pow(int x, int y) {
  int ret = 1;
  while (y) {
    if (y & 1) ret = 1ll * ret * x % 998244353;
    x = 1ll * x * x % 998244353;
    y >>= 1;
  }
  return ret;
}
template <class Ta, class Tb>
void inc(Ta& a, Tb b) {
  a = a + b >= 998244353 ? a + b - 998244353 : a + b;
}
template <class Ta, class Tb>
void dec(Ta& a, Tb b) {
  a = a >= b ? a - b : a + 998244353 - b;
}
int a[1100010], fact[1200010], ifact[1200010];
int C(int n, int m) {
  return 1ll * fact[n] * ifact[m] % 998244353 * ifact[n - m] % 998244353;
}
int main() {
  int n = gi(), lim = 1000000 + n, LIM = lim + n;
  for (int i = 1; i <= n; ++i)
    for (int j = gi() + 1; j <= lim; j += n) ++a[j];
  for (int i = 1; i <= lim; ++i) a[i] += a[i - 1];
  for (int i = 1; i <= lim; ++i)
    if (a[i] > i) {
      lim = i - 1;
      break;
    }
  fact[0] = 1;
  for (int i = 1; i <= LIM; ++i) fact[i] = 1ll * fact[i - 1] * i % 998244353;
  ifact[LIM] = pow(fact[LIM], 998244353 - 2);
  for (int i = LIM; i; --i) ifact[i - 1] = 1ll * ifact[i] * i % 998244353;
  int ans = 0;
  for (int i = std::max(0, lim - n + 1); i <= lim; ++i)
    inc(ans, C(i - a[i] + n - 1, n - 1));
  printf("%d\n", ans);
  return 0;
}
