func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 3e5 + 9, mod = 998244353;   template <const int32_t MOD>   struct modint {     int32_t value;     modint() = default;     modint(int32_t value_) : value(value_) {}     inline modint<MOD> operator+(modint<MOD> other) const {       int32_t c = this->value + other.value;       return modint<MOD>(c >= MOD ? c - MOD : c);     }     inline modint<MOD> operator-(modint<MOD> other) const {       int32_t c = this->value - other.value;       return modint<MOD>(c < 0 ? c + MOD : c);     }     inline modint<MOD> operator*(modint<MOD> other) const {       int32_t c = (int64_t)this->value * other.value % MOD;       return modint<MOD>(c < 0 ? c + MOD : c);     }     inline modint<MOD> &operator+=(modint<MOD> other) {       this->value += other.value;       if (this->value >= MOD) this->value -= MOD;       return *this;     }     inline modint<MOD> &operator-=(modint<MOD> other) {       this->value -= other.value;       if (this->value < 0) this->value += MOD;       return *this;     }     inline modint<MOD> &operator*=(modint<MOD> other) {       this->value = (int64_t)this->value * other.value % MOD;       if (this->value < 0) this->value += MOD;       return *this;     }     inline modint<MOD> operator-() const {       return modint<MOD>(this->value ? MOD - this->value : 0);     }     modint<MOD> pow(uint64_t k) const {       modint<MOD> x = *this, y = 1;       for (; k; k >>= 1) {         if (k & 1) y *= x;         x *= x;       }       return y;     }     modint<MOD> inv() const { return pow(MOD - 2); }     inline modint<MOD> operator/(modint<MOD> other) const {       return *this * other.inv();     }     inline modint<MOD> operator/=(modint<MOD> other) {       return *this *= other.inv();     }     inline bool operator==(modint<MOD> other) const {       return value == other.value;     }     inline bool operator!=(modint<MOD> other) const {       return value != other.value;     }     inline bool operator<(modint<MOD> other) const { return value < other.value; }     inline bool operator>(modint<MOD> other) const { return value > other.value; }   };   template <int32_t MOD>   modint<MOD> operator*(int64_t value, modint<MOD> n) {     return modint<MOD>(value) * n;   }   template <int32_t MOD>   modint<MOD> operator*(int32_t value, modint<MOD> n) {     return modint<MOD>(value % MOD) * n;   }   template <int32_t MOD>   istream &operator>>(istream &in, modint<MOD> &n) {     return in >> n.value;   }   template <int32_t MOD>   ostream &operator<<(ostream &out, modint<MOD> n) {     return out << n.value;   }   using mint = modint<mod>;   vector<mint> Thomas(vector<vector<mint>> a) {     int n = a.size();     for (int i = 1; i < n; i++) {       mint x = a[i][0] * a[i - 1][1].inv();       a[i][1] -= x * a[i - 1][2];       a[i][3] -= x * a[i - 1][3];     }     for (int i = n - 2; i >= 0; i--) {       mint x = a[i][2] * a[i + 1][1].inv();       a[i][3] -= x * a[i + 1][3];     }     vector<mint> ans;     for (int i = 0; i < n; i++) {       ans.push_back(a[i][3] * a[i][1].inv());     }     return ans;   }   int a[N];   int32_t main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     int n;     cin >> n;     mint m = 0;     for (int i = 0; i < n; i++) cin >> a[i], m += a[i];     vector<vector<mint>> mat(m.value + 1);     for (int i = 0; i <= m.value; i++) {       vector<mint> v(4, 0);       if (i) v[0] = mint(i) / m;       v[1] = (m - i) * (n - 2) / m / (n - 1) - 1;       if (i + 1 <= m.value) v[2] = (m - i) / m / (n - 1);       v[3] = mint(-i) / m;       mat[i] = v;     }     vector<mint> f = Thomas(mat);     mint ans = 0;     for (int i = 0; i < n; i++) ans += f[a[i]];     ans -= (n - 1) * f[0] + f[m.value];     cout << ans <<   n ;     return 0;   }   