// g++ a.cpp // ./a.out #include #include #include #include #include using namespace std; const int mod = 998244353; long modpow(long a, long b) { if (b == 0) return 1; if ((b & 1) == 0) return modpow((a * a) % mod, b >> 1); return (a * modpow(a, b - 1)) % mod; } int main() { int N; cin >> N; vector A(N); vector T(N); T[0] = 1; for (int i = 0; i < N; i++) cin >> A[i]; int two = 1; for (int i = 0; i < N; i++) { A[i] *= two; A[i] %= mod; } for (int i = 1; i < N; i++) T[i] = (T[i - 1] * 2) % mod; vector> I(N + 1, vector(3)); I[0][2] = modpow(6, mod - 2); I[0][0] = 0; I[0][1] = 0; I[1][0] = 1; I[1][1] = modpow(-2, mod - 2) + mod; I[1][2] = 0; for (int i = 2; i < N; i++) { I[i][0] = ((i - 1) * I[i - 2][0] % mod) * modpow(i, mod - 2) % mod; I[i][1] = (((i - 1) * I[i - 2][1] % mod) * modpow(i, mod - 2) % mod - modpow(T[i], mod - 2)) % mod; if (I[i][1] < 0) I[i][1] += mod; I[i][2] = ((i - 1) * I[i - 2][2] % mod) * modpow(i, mod - 2) % mod; } long long a, b, c = 0; for (int i = 0; i < N; i++) { a += (((A[i] * T[i]) % mod) * I[i][0]) % mod; a %= mod; b += (((A[i] * T[i]) % mod) * I[i][1]) % mod; b %= mod; c += (((A[i] * T[i]) % mod) * I[i][2]) % mod; c %= mod; } if (a < 0) a += mod; if (b < 0) b += mod; if (c < 0) c += mod; cout << a << " " << b << " " << c << endl; }