void mul( int n, int *a, int *b, int *c ) {
if (n <= 16) {
fill(c, c + 2 * n, 0);
forn(i, n) forn(j, n) c[i + j] += a[i] * b[j];
return;
}
int n1 = n / 2, f[n];
forn(i, n1) {
c[i] = a[i] + a[i + n1];
c[i + n] = b[i] + b[i + n1];
}
mul(n1, c, c + n, f);
mul(n1, a, b, c);
mul(n1, a + n1, b + n1, c + n);
forn(i, n) f[i] -= c[i] + c[i + n];
forn(i, n) c[i + n1] += f[i];
}