#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target( \
    "avx,avx2,fma,sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
long long MOD = 998244353;
long long st(long long t, long long id, long long mod) {
  long long res = 1, a = t, n = id;
  while (n) {
    if (n & 1) res = (res * a) % mod;
    a = (a * a) % mod;
    n >>= 1;
  }
  return res % mod;
}
long long del(long long a, long long b) {
  return (a * st(b, MOD - 2, MOD)) % MOD;
}
long long fac[3000000];
long long kol[3000000];
long long ch(long long a, long long b) {
  return del(fac[b], (fac[a] * fac[b - a]) % MOD) % MOD;
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0),
      cout << fixed << setprecision(20);
  long long n;
  cin >> n;
  vector<long long> a(n);
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    kol[a[i] % n]++;
  }
  fac[0] = 1;
  for (int i = 1; i < 3000000; i++) {
    fac[i] = (fac[i - 1] * i) % MOD;
  }
  sort(a.begin(), a.end());
  long long ans = -1;
  for (int i = 0; i < n; i++) {
    if (a[i] < i) {
      ans = i - 1;
      break;
    }
  }
  if (ans != -1) {
    long long res = 0;
    long long lf = 0;
    for (int i = 0; i <= ans; i++) {
      while (a[lf] < i) {
        lf++;
      }
      res += ch(n - 1, n + i - lf - 1);
      res %= MOD;
    }
    cout << res % MOD;
  } else {
    long long sm = 0;
    for (int i = 0; i < n; i++) {
      sm += a[i] / n;
    }
    long long res = 0;
    for (int t = 0; t < n; t++) {
      if (t) sm -= 1;
      if (t) sm += kol[n - t];
      res += ch(n - 1, sm + n - 1);
      res %= MOD;
    }
    cout << res % MOD;
  }
}
