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


	explicit 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);
	}




};