#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using Int = long long; using Real = long double; using CP = complex; using P = pair; const Int MOD = 1000000007; const Int MOD2 = 998244353; const Int LINF = (1LL << 60); const int INF = (1000000007); const Real EPS = 1e-10; const long double PI = 3.141592653589793238462643383279502884L; Int modpow(Int a, Int b){ if(b == 0)return 1; if(b % 2)return modpow(a, b-1) * a % MOD2; auto half = modpow(a, b / 2); return half * half % MOD2; } Int inv(Int x){ return modpow(x, MOD2 - 2); } int main() { Int n, a; cin >> n; map cnt; vector as; for(int i = 0;i < n;i++){ cin >> a; cnt[a]++; as.push_back(a); } Int ans = 0; for(auto [x, x_cnt]:cnt){ vector val(x_cnt, 0); val[0] = 1; for(auto a:as){ for(int i = x_cnt - 1;i >= 0;i--){ Int tmp = 0; Int inv_x_a = inv(x+a); Int prod = inv_x_a; Int fact = 1; for(int j = 0;i - j >= 0;j++){ (tmp += val[i-j] * prod % MOD2 * fact %MOD2 * ((j % 2 == 1) ? -1 : 1)) %= MOD2; (prod *= inv_x_a) %= MOD2; (fact *= (j+1))%=MOD2; } val[i] = tmp; } if(a != x){ for(int i = x_cnt - 1;i >= 0;i--){ Int tmp = 0; Int inv_x_a = inv(x-a); Int prod = inv_x_a; Int fact = 1; for(int j = 0;i - j >= 0;j++){ (tmp += val[i-j] * prod % MOD2 * fact %MOD2 * ((j % 2 == 1) ? -1 : 1)) %= MOD2; (prod *= inv_x_a) %= MOD2; (fact *= (j+1))%=MOD2; } val[i] = tmp; } } } (ans += val.back()) %= MOD2; } ans *= 2; ans %= MOD2; if(n % 2 == 0)ans = (MOD2 - ans) % MOD2; cout << ans << endl; return 0; }