#include<bits/stdc++.h> usingnamespacestd; typedeflonglong ll; #define pii pair<int, int> #define mk make_pair constint N = 4e6 + 10; //const int mod = 1e9 + 7; constint P = 1004535809, gi = 3; constint mod = P; constdouble pi = acos(-1.0); intinc(int x, int y, int mo) { if (x + y >= mo) return (x + y - mo); else return (x + y); }
intdel(int x, int y, int mo) { if (x - y < 0) return (x - y + mo); else return (x - y); } intread() { ll x = 0, f = 1; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); } while (c >= '0' && c <= '9') x = (x << 1) + (x << 3) + c - '0', x %= P, c = getchar(); return x * f % P; }
intqpow(int a, int x, int mo) { int res = 1; while (x) { if (x & 1) res = 1ll * res * a % mo; x >>= 1; a = 1ll * a * a % mo; } return res; } int rev[N]; voidNTT(int *A, int n, int inv) { for (int i = 0; i < n; i++) if (i < rev[i]) swap(A[i], A[rev[i]]); for (int l = 1; l < n; l <<= 1) { int tt = qpow(gi, (P - 1) / (l << 1), P); int temp = (inv == 1 ? tt : qpow(tt, P - 2, P)); for (int i = 0; i < n; i += (l << 1)) { int omega = 1; for (int j = 0; j < l; j++, omega = 1ll * omega * temp % P) { int x = A[i + j], y = 1ll * omega * A[i + j + l] % P; A[i + j] = inc(x, y, P); A[i + j + l] = del(x, y, P); } } } int invv = qpow(n, P - 2, P); if (inv == -1) for (int i = 0; i < n; i++) A[i] = 1ll * A[i] * invv % P; }
voidNTTX(int *a, int n, int *b, int m, int *ans) { int ML = 1, bit = 0; while (ML < n + m) ML <<= 1, bit++; for (int i = 0; i < ML; i++) rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (bit - 1)); NTT(a, ML, 1); NTT(b, ML, 1); for (int i = 0; i < ML; i++) ans[i] = 1ll * a[i] * b[i] % P; NTT(ans, ML, -1); } int a[N], g[N], ans[N]; intmain() { int n = read(); int k = read(); int op = read(); for (int i = 1; i <= n; i++) a[i] = read(); g[1] = 1; for (int i = 2; i <= n; i++) { if (op == 0) g[i] = 1ll * g[i - 1] * (k + i - 2) % mod * qpow(i - 1, mod - 2, mod) % mod; else g[i] = (1ll * g[i - 1] * (k - i + 2) % mod * qpow(i - 1, mod - 2, mod) % mod * (-1) + mod) % mod; } NTTX(a, n, g, n, ans); for (int i = 2; i <= n + 1; i++) printf("%d ", ans[i]); }