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];
}