#include #include #include using namespace std; using i64 = long long; inline i64 mod_mul(const i64& x, const i64& y, const i64& m) { return x * y % m; } inline i64 mod_pow(const i64& a, const i64& r, const i64& n, const i64& m) { if(n == 0) { return r; } if(n & 1) { return mod_pow(a, mod_mul(a, r, m), n-1, m); } return mod_pow(mod_mul(a, a, m), r, n>>1, m); } map, i64> cache; inline i64 mod_pow(const i64 a, const i64 n, const i64 m) { if(cache.count({a, n, m})) { return cache[{a, n, m}]; } return cache[{a, n, m}] = mod_pow(a, 1, n, m); } constexpr i64 O = 3; constexpr i64 M = 998244353; void myfmt(vector &a, bool inv) { int n = int(a.size()); if(n == 1) { return; } int m = n / 2; vector a0(m), a1(m); for(int i=0, j=0; i &a) { myfmt(a, false); } void ifmt(vector &a) { myfmt(a, true); int n = int(a.size()); i64 inv = mod_pow(n, M-2, M); for(int i=0; i convol(vector a, vector b) { int n = 1; while(n < a.size() + b.size()) { n <<= 1; } a.resize(n); b.resize(n); fmt(a); fmt(b); vector c(n); for(int i=0; i p(n), q(n); for(int i=0; i r = convol(p, q); int Q; scanf("%d", &Q); for(int v=0; v