#include <bits/stdc++.h>
using namespace std;
const int p = 998244353;
inline int Sum(int x, int y) {
  x += y;
  if (x >= p) {
    x -= p;
  }
  return x;
}
inline int Sub(int x, int y) {
  x -= y;
  if (x < 0) {
    x += p;
  }
  return x;
}
inline int qpow(int value, int n) {
  int result = 1;
  for (; n; n >>= 1, value = (long long)value * value % p) {
    if (n & 1) {
      result = (long long)result * value % p;
    }
  }
  return result;
}
int main() {
  do {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
  } while (false);
  int k;
  cin >> k;
  const int limit = 2e6;
  vector<int> appear(limit + 1);
  for (int i = 0; i < k; i++) {
    int value;
    cin >> value;
    appear[value]++;
  }
  vector<int> fact(limit + 1);
  fact[0] = 1;
  for (int i = 1; i <= limit; i++) {
    fact[i] = (long long)fact[i - 1] * i % p;
  }
  vector<int> ifac(limit + 1);
  ifac[limit] = qpow(fact[limit], p - 2);
  for (int i = limit; i; i--) {
    ifac[i - 1] = (long long)ifac[i] * i % p;
  }
  auto binom = [&](int x, int y) {
    if (x < y || y < 0) {
      return 0ll;
    } else {
      return (long long)fact[x] * ifac[y] % p * ifac[x - y] % p;
    }
  };
  vector<int> event = appear;
  int remain = k, free = 0, ans = 1;
  for (int i = 0;; i++) {
    remain -= appear[i];
    free += 1 - event[i];
    event[i + k] += event[i];
    if (remain && free >= 0) {
      ans = Sum(ans, binom(free + k - 1, free));
      ans = Sub(ans, binom(free - remain + k - 1, free - remain));
    } else {
      break;
    }
  }
  cout << ans << endl;
  return 0;
}
