#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int v = 0, f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    v = v * 10 + c - '0';
    c = getchar();
  }
  return v * f;
}
const int Maxn = 1000005;
const long long mod = 998244353;
long long fact[Maxn], ivf[Maxn];
long long qp(long long x, long long p) {
  long long ret = 1;
  while (p) {
    if (p & 1) ret = ret * x % mod;
    x = x * x % mod;
    p >>= 1;
  }
  return ret;
}
long long inv(long long x) { return qp(x, mod - 2); }
long long C(long long x, long long y) {
  return fact[x] * ivf[y] % mod * ivf[x - y] % mod;
}
int a[Maxn], k, l[Maxn];
vector<int> nd[Maxn];
int main() {
  fact[0] = 1;
  for (int i = 1; i < Maxn; i++) {
    fact[i] = fact[i - 1] * i % mod;
  }
  for (int i = 0; i < Maxn; i++) ivf[i] = inv(fact[i]);
  scanf("%d", &k);
  int M = 0;
  for (int i = 1; i <= k; i++) {
    scanf("%d", &a[i]);
    M = max(M, a[i]);
    int tmp = a[i] + 1;
    for (int j = tmp; j < Maxn; j += k) {
      nd[j].push_back(i);
    }
  }
  long long ans = 1;
  int sl = 0, c = k;
  for (int i = 1; i <= M; i++) {
    for (int j = 0; j < nd[i].size(); j++) {
      int v = nd[i][j];
      if (!l[v]) c--;
      l[v]++;
      sl++;
    }
    if (sl > i) break;
    int t = i - sl;
    ans += C(t + k - 1, k - 1);
    if (t >= c) {
      ans -= C(t - c + k - 1, k - 1);
    }
    ans = (ans % mod + mod) % mod;
  }
  printf("%lld\n", ans);
  return 0;
}
