#include <iostream>
#include <vector>
class Set {
public:
    std::vector<int64_t> v;


    Set(const std::vector<int64_t>& v) {
        this->v = v;
    }

    std::vector<int64_t> Data() const {
        return this->v;
    }


    void Add(int64_t number) {
       bool is_new = true;
       for (int i = 0; i < this->v.size(); i++)
           if (number == this->v[i]) { is_new = false; break; }
      if(is_new) this->v.push_back(number);
    }

    void Remove(int64_t number) {
        for (int i = 0; i < this->v.size(); i++)
            if (this->v[i] == number) { this->v.erase(this->v.begin() + i); break;}
    }

    bool Contains(int64_t number) const {
        for (int i = 0; i < this->v.size(); i++)
            if (this->v[i] == number) return true;
        return false;
    }



    Set Union(const Set& other) const {
        auto this_set = Data();
        auto other_set = other.Data();
        int size_other = other_set.size();
        int this_size = this_set.size();
        std::vector<int64_t> new_v;
        bool is_new = true;
        for (int i = 0; i < this_size; i++)
            new_v.push_back(this_set[i]);
        for (int i = 0; i < size_other; i++) {
            is_new = true;
            for (int j = 0; j < this_size; j++) {
                if (other_set[i] == this_set[j]) {
                    is_new = false;
                    break;
                }
            }
            if (is_new == true) new_v.push_back(other_set[i]);
        }
        return Set(new_v);
    }


    Set Intersection(const Set& other) const {
        auto this_set = Data();
        auto other_set = other.Data();
        int size_other = other_set.size();
        int this_size = this_set.size();
        std::vector<int64_t> new_v;
        for (int i = 0; i < this_size; i++) {
            for (int j = 0; j < size_other; j++) {
                if (other_set[j] == this_set[i]) {
                    new_v.push_back(this_set[i]);
                    break;
                }
            }
        }
        return Set(new_v);
    }

    Set Difference(const Set& other) const {
        auto this_set = Data() > other.Data() ? Data() : other.Data();
        auto other_set = Data() < other.Data() ? Data() : other.Data();
        int size_other = other_set.size();
        int this_size = this_set.size();
        bool is_different = true;
        std::vector<int64_t> new_v;
        for (int i = 0; i < this_size; i++) {
            is_different = true;
            for (int j = 0; j < size_other; j++) {
                if (other_set[j] == this_set[i]) { 
is_different = false; break; }
            }
            if(is_different)
                new_v.push_back(this_set[i]);
        }

        return Set(new_v);
    }

    Set SymmetricDifference(const Set& other) const {
        auto this_set = Data();
        auto other_set = other.Data();
        int size_other = other_set.size();
        int this_size = this_set.size();
        bool is_different = true;
        std::vector<int64_t> new_v;
        for (int i = 0; i < this_size; i++) {
            if(!other.Contains(this_set[i])) new_v.push_back(this_set[i]);
        }
        for (int i = 0; i < size_other; i++) {
            if (!Contains(other_set[i])) new_v.push_back(other_set[i]);
        }
        return Set(new_v);
    }




};