#include <vector>
#include <iostream>
#include <bitset>
using namespace std;
#define forn(i, n) for (int i = 0; i < (int)(n); i++)
// (x^0 * a[0] + x^1 * a[1] + x^2 * a[2] + ...)
// x^i * a[i] * x^j * b[j]
// F_2 -- остатки по модулю 2 | Field = {0, 1}
int n, m;
// vector<int> a(n), b(m), c(n+m);
bitset<1000> a, b, c;
int main() {
// для F_2
forn(i, n)
if (a[i])
c ^= b << i;
// n*m / 64
forn(i, n)
if (a[i])
forn(j, m)
c[i + j] ^= b[j];
// для F_2
forn(i, n)
forn(j, m)
c[i + j] ^= a[i] && b[j];
// для int-ов
forn(i, n)
forn(j, m)
c[i + j] += a[i] * b[j];
}
// 3-sum : a[0],a[1],a[2],...a[n-1] | x + y + z = S
// n^2
// S <= 10^5, a[i] > 0
// MultiplyPolynom(S)
// (x^a[0] + x^a[1] + x^a[2] + ...)^3
// x^a[i]*x^a[j]*x^a[k] = +1*x^{a[i]+a[j]+a[k]}
// count(S) : коэффициент при x^S
// SlogS (Фурье)
// S^2 / 64
forn(i, n)
if (a[i])
c |= b << i;
// a*b
|