#include <vector>

class Set {
 public:
    Set() {}
    explicit Set(const std::vector<int64_t>& vector) : myset(vector) {}
    Set Union(const Set& b) const {
     std::vector<int64_t> c = myset;
     for (size_t i = 0; i < b.myset.size(); i++) {
       if (std::find(c.begin(), c.end(), b.myset[i]) == c.end())
          c.push_back(b.myset[i]);
     }
     return Set(c);
    }
    Set Intersection(const Set& b) const {
     std::vector<int64_t> c;
     for (size_t i = 0; i < myset.size(); i++) {
       for (size_t j = 0; j < b.myset.size(); j++) {
         if (myset[i] == b.myset[j]) {
           c.push_back(b.myset[j]);
         }
       }
     }
     return Set(c);
    }
    Set Difference(const Set& b) const {
     std::vector<int64_t> c = myset;
     for (size_t i = 0; i < b.myset.size(); i++) {
       auto it = std::find(c.begin(), c.end(), b.myset[i]);
       if (it != c.end())
        c.erase(it);
     }
     return Set(c);
    }
    Set SymmetricDifference(const Set& b) const {
     std::vector<int64_t> c = this->Union(b).myset;
     std::vector<int64_t> c_ = this->Intersection(b).myset;
     for (size_t i = 0; i < c_.size(); i++) {
       auto it = std::remove(c.begin(), c.end(), c_[i]);
       c.erase(it);
     }
     return Set(c);
    }
    bool Contains(int64_t num) const {
     if (std::find(myset.begin(), myset.end(), num) == myset.end())
       return false;
     else
       return true;
    }
    void Add(int64_t num) {
     auto last = std::unique(myset.begin(), myset.end());
     myset.erase(last, myset.end());
     if (!this->Contains(num))
       myset.push_back(num);
    }
    void Remove(int64_t num) {
     auto last = std::unique(myset.begin(), myset.end());
     myset.erase(last, myset.end());
     if (this->Contains(num)) {
       auto it = std::remove(myset.begin(), myset.end(), num);
       myset.erase(it);
     }
    }
    std::vector<int64_t> Data() const {
     return myset;
    }

 private:
    std::vector<int64_t> myset;
};