#include #include using namespace std; using namespace atcoder; typedef modint998244353 mint; typedef long long ll; int main(){ // sum(A[i])はかなり小さいので, デカイやつは一周まわるので除外しまくる. int N; cin >> N; vector A(N); mint ans = 0; mint nnv = mint(2).pow(N-1); queue> Q; int asum = 0; for (int i=0; i> A[i]; ans += nnv * A[i]; Q.push({A[i], 1}); asum += A[i]; } // これは多項式をマージするやつのテク O(N (log N)^2) while (Q.size() > 1){ vector X = Q.front(); Q.pop(); vector Y = Q.front(); Q.pop(); Q.push(convolution(X, Y)); } vector W = Q.front(); mint jogai = 0; for (int i=0; i<=N; i++){ if (asum - i >= 999630629){ jogai += W[i]; } } ans -= jogai * mint(999630629); cout << ans.val() << endl; }