#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;
};