#include <utility>
#include <vector>
#include <algorithm>
#include <cstdint>


class Set {
 public:
     explicit Set(const std::vector<int64_t>& V) {
        for (auto item : V) {
            Add(item);
        }
    }
    Set() = default;


    Set Union(const Set& s) {
        Set S = s;
        for (auto item : set) {
            S.Add(item);
        }
        return S;
    }

    Set Intersection(const Set& s) const {
        Set S;
        for (auto item : set) {
            if (s.Contains(item)) {
                S.Add(item);
            }
        }
        return S;
    }

    Set Difference(const Set& s) const {
        Set S;
        for (auto item : set) {
            if (!s.Contains(item)) {
                S.Add(item);
            }
        }
        return S;
    }

    Set SymmetricDifference(const Set& s) const {
        Set S = s;
        for (auto item : set) {
            S.Add(item);
        }
        for (auto item : set) {
            if (s.Contains(item)) {
                S.Remove(item);
            }
        }
        return S;
    }

    void Add(int64_t num) {
        if (!(find(set.begin(), set.end(), num) != set.end())) {
            set.push_back(num);
        }
        UpdateSet();
    }

    std::vector<int64_t> Data() {
        return set;
    }

    void Remove(int64_t num) {
        set.erase(find(set.begin(), set.end(), num));
    }

    bool Contains(int64_t num) const {
        if (find(set.begin(), set.end(), num) != set.end()) {
            return true;
        } else {
            return false;
        }
    }

 private:
    void UpdateSet() {
        sort(set.begin(), set.end());
    }
    std::vector<int64_t> set;
};