Problem:
Set Symmetric Difference

Find the symmetric difference of two sets $A = \{a_0, a_1, ..., a_{n-1}\}$ and $B = \{b_0, b_1, ..., b_{m-1}\}$.

Input

The input is given in the following format.

$n$
$a_0 \; a_1 \; ... \; a_{n-1}$
$m$
$b_0 \; b_1 \; ... \; b_{m-1}$

Elements in $A$ and $B$ are given in ascending order. There are no duplicate elements in each set.

Output

Print elements in the symmetric difference in ascending order. Print an element in a line.

Constraints

$1 \leq n, m \leq 200,000$

$0 \leq a_0 < a_1 < ... < a_{n-1} \leq 10^9$

$0 \leq b_0 < b_1 < ... < b_{m-1} \leq 10^9$

Sample Input 1

7
1 2 3 4 5 6 7
4
2 4 6 8

Sample Output 1

1
3
5
7
8

Solution in C++14 (judge verdict: Accepted)

#include <iostream>
#include <algorithm>
#include <string>
#include <fstream>
#include <vector>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <list>
#include <bitset>

using namespace std;
typedef long long ll;

// #define DEBUG

class Unionfind
{
    vector<int> p;

public:
    Unionfind(int n);
    int find(int x);
    void unite(int x, int y);
    bool match(int x, int y);
};

Unionfind::Unionfind(int n)
{
    for (int i = 0; i < n; i++)
    {
        p.push_back(i);
    }
}

int Unionfind::find(int x)
{
    while (p[x] != x)
    {
        p[x] = p[p[x]];
        x = p[x];
    }
    return x;
}

bool Unionfind::match(int x, int y)
{
    return (find(x) == find(y)) ? true : false;
}

void Unionfind::unite(int x, int y)
{
    x = Unionfind::find(x);
    y = Unionfind::find(y);
    if (x != y)
    {
        p[x] = y;
    }
}

int main()
{
#ifdef DEBUG
    cout << "DEBUG MODE" << endl;
    ifstream in("input.txt"); //for debug
    cin.rdbuf(in.rdbuf());    //for debug
#endif
    int n, m, x;
    set<int> a, b, c, d, e;

    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> x;
        a.insert(x);
    }
    cin >> m;
    for (int i = 0; i < m; i++)
    {
        cin >> x;
        b.insert(x);
    }

    for (auto itr = a.begin(); itr != a.end(); itr++)
    {
        c.insert(*itr);
    }

    for (auto itr = b.begin(); itr != b.end(); itr++)
    {
        c.insert(*itr);
    }

    for (auto itr = a.begin(); itr != a.end(); itr++)
    {
        auto itr2 = b.find(*itr);
        if (itr2 != b.end())
            d.insert(*itr);
    }

    for (auto itr = c.begin(); itr != c.end(); itr++)
    {
        auto itr2 = d.find(*itr);
        if (itr2 == d.end())
            e.insert(*itr);
    }

    for (auto itr = e.begin(); itr != e.end(); itr++)
    {
        cout << *itr << endl;
    }

    return 0;
}

// getline(cin,s);
// a = strtok(s, ",");  ","で分解
// for (int i = 0; i < n; i++)