#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; //https://atcoder.jp/contests/atc001/tasks/fft_c template vector> fft(vector> a, bool inv = false){ int N = a.size(); int h = 0; for (int i=0; (1<>k & 1) << (h-1-k); if (i < j) swap(a[i], a[j]); } for (int b=1; b w = polar(1.0, (2.0*M_PI) / (2.0*b) * j * (inv ? 1 : -1)); for (int k=0; k s = a[j+k]; complex t = a[j+k+b] * w; a[j+k] = s + t; a[j+k+b] = s - t; } } } if (inv){ for (int i=0; i vector> fft(vector a, bool inv = false){ vector> a_complex(a.size()); for (int i=0; i(a[i], 0); return fft(a_complex, inv); } //convolution c[k] = sum(i=0, k) a[i]b[k-j] template vector convolution(vector a, vector b){ int s = a.size() + b.size() - 1; int t = 1; while(t < s) t *= 2; a.resize(t); b.resize(t); vector> A = fft(a); //DFT vector> B = fft(b); //DFT for (int i=0; i> L >> M >> N; vector a(N+1), b(N+1); for (int i=0; i> A; a[A] = 1; } for (int i=0; i> B; b[B] = 1; } reverse(b.begin(), b.end()); vector c = convolution(a, b); cin >> Q; for (int i=0; i