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 (int 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 (int i = 0; i < myset.size(); i++) {
       for (int 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 (int 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 (int i = 0; i < c_.size(); i++) {
       auto it = std::remove(c.begin(), c.end(), c_[i]);
       c.erase(it);
     }
     return Set(c);
   }
   void Add(int64_t num) {
     myset.push_back(num);
   }
   void Remove(int64_t num) {
     auto it = std::remove(myset.begin(), myset.end(), num);
     myset.erase(it);
   }
   bool Contains(int64_t num) const {
     if (std::find(myset.begin(), myset.end(), num) == myset.end())
       return false;
    else
       return true;
   }
   std::vector<int64_t> Data() const {
     return myset;
   }

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