#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
const int MOD = 998244353;
const int MAXN = 100000;
const int MAXSUM = 1000000;
void inc(int &a, int b) {
  if ((a += b) >= MOD) a -= MOD;
}
int inv[MAXSUM + 1];
int fac[MAXSUM + 1];
int ifac[MAXSUM + 1];
int choose(int n, int k) {
  return (long long)fac[n] * ifac[k] % MOD * ifac[n - k] % MOD;
}
int calc(int n, int k) {
  if (k == 0) return 0;
  return choose(n + k - 1, k - 1);
}
int n;
int a[MAXN];
int b[MAXN];
int solve() {
  inv[1] = 1;
  for (int i = (2); i <= (MAXSUM); ++i)
    inv[i] = (long long)(MOD - MOD / i) * inv[MOD % i] % MOD;
  fac[0] = 1;
  for (int i = (1); i <= (MAXSUM); ++i)
    fac[i] = (long long)fac[i - 1] * i % MOD;
  ifac[0] = 1;
  for (int i = (1); i <= (MAXSUM); ++i)
    ifac[i] = (long long)ifac[i - 1] * inv[i] % MOD;
  sort(a, a + n);
  int lim = -1;
  for (int i = (0); i < (n); ++i)
    if (a[i] < i) {
      lim = i - 1;
      break;
    }
  int ret = 0;
  if (lim != -1) {
    int at = 0;
    for (int i = (0); i <= (lim); ++i) {
      assert(at <= i);
      inc(ret, calc(i - at, n));
      while (at < n && a[at] == i) ++at;
    }
  } else {
    for (int i = (0); i < (n); ++i) b[i] = a[i] % n;
    sort(b, b + n);
    int at = 0;
    int rem = 0;
    for (int i = (0); i < (n); ++i) rem += a[i] / n;
    for (int i = (0); i < (n); ++i) {
      inc(ret, calc(rem, n));
      ++rem;
      while (at < n && b[at] == i) ++at, --rem;
    }
  }
  return ret;
}
void run() {
  scanf("%d", &n);
  for (int i = (0); i < (n); ++i) scanf("%d", &a[i]);
  printf("%d\n", solve());
}
int main() {
  run();
  return 0;
}
