func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long N = 1e5 + 2;   const long long M = 1e6 + 2;   const long long mod = 998244353;   long long ar[N], fact[M], inv[M], cnt[N];   long long binpow(long long x, long long y) {     long long tich = 1;     while (y) {       if (y & 1) {         tich *= x;         tich %= mod;       }       x *= x;       x %= mod;       y >>= 1;     }     return tich;   }   long long C(long long x, long long y) {     return ((fact[y] * inv[y - x]) % mod * inv[x]) % mod;   }   signed main() {     ios::sync_with_stdio(0);     cin.tie(0);     long long n, i, j, k, l, ans = 0, sum = 0;     cin >> n;     for (i = 1; i <= n; i++) {       cin >> ar[i];       cnt[ar[i] % n]++;       sum += ar[i];     }     fact[0] = 1;     for (i = 1; i < M - 1; i++) {       fact[i] = (fact[i - 1] * i) % mod;     }     inv[M - 2] = binpow(fact[M - 2], mod - 2);     for (i = M - 2; i > 0; i--) {       inv[i - 1] = (inv[i] * i) % mod;     }     sort(ar + 1, ar + 1 + n);     long long pos = 0;     for (i = 1; i < n; i++) {       if (ar[i + 1] < i) {         pos = i;         break;       }     }     if (pos) {       j = 1;       for (i = 0; i < pos; i++) {         while (ar[j] < i) {           j++;         }         ans += C(n - 1, i - (j - 1) + n - 1);         if (ans >= mod) {           ans -= mod;         }       }       cout << ans;     } else {       for (i = 1; i <= n; i++) {         sum -= ar[i] % n;       }       sum /= n;       for (i = 1; i <= n; i++) {         sum = sum + cnt[n - i] - 1;         if (sum >= 0) {           ans += C(n - 1, sum + n - 1);           if (ans >= mod) {             ans -= mod;           }         }       }       cout << ans;     }   }   