#include #include #include #include #include using namespace std; int const logLimit = 3; int const limit = 1 << logLimit; vector rev; void calcRev () { rev = vector (limit, 0); for (int i = 0; i < limit; i++) for (int k = 0; k < logLimit; k++) if (i & (1 << k)) rev[i] ^= 1 << (logLimit - k - 1); } using Num = complex ; double const Pi = acos (-1.0); vector z; void calcZ () { z = vector (limit); for (int i = 0; i < limit; i++) z[i] = Num (cos (i * 2 * Pi / limit), sin (i * 2 * Pi / limit)); } vector fft (const vector & a0, bool inv = false) { vector a = a0; for (int i = 0; i < limit; i++) if (i < rev[i]) swap (a[i], a[rev[i]]); if (inv) reverse (z.begin () + 1, z.end ()); for (int k = 0, span = 1, step = limit / 2; k < logLimit; k++, span *= 2, step /= 2) { for (int i = 0; i < limit; i += 2 * span) for (int j = 0; j < span; j++) { int u = i + j; int v = i + j + span; Num x = a[u] + a[v] * z[j * step]; Num y = a[u] + a[v] * z[j * step + limit / 2]; a[u] = x; a[v] = y; } } if (inv) { reverse (z.begin () + 1, z.end ()); for (int i = 0; i < limit; i++) a[i] /= limit; } return a; } int main () { calcRev (); calcZ (); vector a (limit, Num (0)); int m; cin >> m; for (int i = 0; i < m; i++) { int x; cin >> x; a[i] = Num (x); } auto res = fft (a); auto b = fft (res, true); for (int i = 0; i < limit; i++) cout << b[i] << endl; return 0; }