Language: C++

#include <cassert>
#include <stdio.h>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <functional>
#include <vector>
#include <string>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <set>
#include <queue>
#include <stack>

using namespace std;

typedef __int128 LL;
//typedef long long LL;
typedef unsigned long long ULL;
typedef vector<int> VI;
typedef pair<int, int> PII;


//#define debug(args...) {vector<string> _v = split(#args, ','); err(_v.begin(), args); puts("");}
//vector<string> split(const string& s, char c) {vector<string> v; stringstream ss(s); string x; while (getline(ss, x, c)) v.push_back(x); return v;}
//void err(vector<string>::iterator it) {}
//template<typename T, typename... Args> void err(vector<string>::iterator it, T a, Args... args) {cerr << it -> substr((*it)[0] == ' ', it -> length()) << " = " << a << ", "; err(++it, args...);}

#if (( _WIN32 || __WIN32__ ) && __cplusplus < 201103L)
#define lld I64d
#else
#define lld lld
#endif

#define all(x)  (x).begin(),(x).end()
#define tr(c, it)   for(auto it=c.begin(); it!=c.end(); it++)
#define clr(a, b)   memset(a, b, sizeof(a))
#define forn(i, n)   for(int i=0; i<n; i++)

const LL INF = 0x3f3f3f3f3f3f3f3fll;

const int N = 200010;
int a[N], b[N];


const int FFTSZ = 1<<29; //TODO 2^18 = 262144 2^20=1048576
const double pi = acos(-1.);
struct cp{
    double real, img;
    cp(double _r=0.0, double _i=0.0):real(_r),img(_i){}
    cp operator +(const cp &c) const {
        return cp(real+c.real, img+c.img);
    }
    cp operator -(const cp &c) const {
        return cp(real-c.real, img-c.img);
    }
    cp operator *(const cp &c) const {
        return cp(real*c.real-img*c.img, real*c.img+img*c.real);
    }
};

// dft -> op = 1 idft -> op = -1
// n should equal 2^k > len, cp is 0-based
void fft(cp x[], int n, int op) {
    for(int i=1, j=0; i<n; i++) {
        for(int l=n>>1; (j^=l)<l; l>>=1);
        if (i < j) swap(x[i], x[j]);
    }

    for(int h=2; h<=n; h<<=1) {
        cp wn(cos(-op*2*pi/h), sin(-op*2*pi/h));
        for(int j=0; j<n; j+=h) {
            cp w(1, 0);
            for(int k=j; k<j+h/2; k++) {
                cp u = x[k], v = w * x[k + h/2];
                x[k] = u + v, x[k + h/2] = u - v;
                w = w * wn;
            }
        }
    }

    if(op == -1)
        for(int i=0; i<n; i++) x[i].real /= n, x[i].img /= n;
}

// return lena + lenb - 1 for length of c
cp xxx[FFTSZ], yyy[FFTSZ];
int convolution(int a[], int lena, int b[], int lenb, int c[]) {
    int len = 1;
    while(len < lena + lenb - 1) len <<= 1;

    for(int i=0; i<len; i++) {
        if(i < lena) xxx[i] = cp(a[i] * 1.0, 0.0);
        else xxx[i] = cp(0.0, 0.0);
    }

    for(int i=0; i<len; i++) {
        if(i < lenb) yyy[i] = cp(b[i] * 1.0, 0.0);
        else yyy[i] = cp(0.0, 0.0);
    }

    fft(xxx, len, 1), fft(yyy, len, 1);
    for(int i=0; i<len; i++) xxx[i] = xxx[i] * yyy[i];
    fft(xxx, len, -1);

    len = lena + lenb - 1;
    c[len] = 0;
    for(int i=0; i<len; i++)
        c[i] = int(xxx[i].real + 0.5);
    return len;
}

int aa[FFTSZ], bb[FFTSZ], cc[FFTSZ];
int n;

int main()
{
#ifdef LOCAL
    freopen("in", "r", stdin);
    //freopen("out", "w", stdout);
#endif

    scanf("%d", &n);
    {
        for(int i=1; i<=n; ++i)
        {
            scanf("%d", &a[i]);
            aa[a[i]] ++ ;
        }

        for(int i=1; i<=n; i++)
        {
            scanf("%d", &b[i]);
            bb[b[i]] ++;
        }

        int sz = 1 << 28;
        convolution(aa, sz, bb, sz, cc);

        int ans = 0;
        for(int i=0; i<(1<<29); i++)
        {
            if(cc[i] & 1)
            {
                //debug(i);
                ans ^= i;

            }
        }
        printf("%d\n", ans);



    }


    return 0;
}

Compiler output:
/tmp/ccoGByuS.o: in function `convolution(int*, int, int*, int, int*)':
a.cc:(.text+0x4ac): relocation truncated to fit: R_X86_64_PC32 against symbol `yyy' defined in .bss section in /tmp/ccoGByuS.o
a.cc:(.text+0x4ee): relocation truncated to fit: R_X86_64_PC32 against symbol `yyy' defined in .bss section in /tmp/ccoGByuS.o
a.cc:(.text+0x539): relocation truncated to fit: R_X86_64_PC32 against symbol `yyy' defined in .bss section in /tmp/ccoGByuS.o
a.cc:(.text+0x55d): relocation truncated to fit: R_X86_64_PC32 against symbol `yyy' defined in .bss section in /tmp/ccoGByuS.o
/tmp/ccoGByuS.o: in function `main':
a.cc:(.text+0x66a): relocation truncated to fit: R_X86_64_PC32 against symbol `n' defined in .bss section in /tmp/ccoGByuS.o
a.cc:(.text+0x6e1): relocation truncated to fit: R_X86_64_PC32 against symbol `aa' defined in .bss section in /tmp/ccoGByuS.o
a.cc:(.text+0x6f8): relocation truncated to fit: R_X86_64_PC32 against symbol `aa' defined in .bss section in /tmp/ccoGByuS.o
a.cc:(.text+0x705): relocation truncated to fit: R_X86_64_PC32 against symbol `n' defined in .bss section in /tmp/ccoGByuS.o
a.cc:(.text+0x76a): relocation truncated to fit: R_X86_64_PC32 against symbol `bb' defined in .bss section in /tmp/ccoGByuS.o
a.cc:(.text+0x781): relocation truncated to fit: R_X86_64_PC32 against symbol `bb' defined in .bss section in /tmp/ccoGByuS.o
a.cc:(.text+0x78e): additional relocation overflows omitted from the output
collect2: error: ld returned 1 exit status