//------------
// Da Introduction to Programming Using Java: An Object-Oriented Approach
//	Arnow/Weiss: capitolo 8
//------------

import java.io.*;
import java.util.*;

class Set {
    public Set() {
	vector = new Vector();
    }
    
    public boolean isEmpty() {
	return vector.isEmpty();
    }
    
    public int size() {
	return vector.size();
    }
    
    public boolean contains(Object o) {
	Enumeration enum = vector.elements();
	while (enum.hasMoreElements()) {
	    Object elem = enum.nextElement();
	    if (elem.equals(o))
		return true;
	}
	return false;
    }
    
    public void addElement(Object o) {
	if (!contains(o))
	    vector.addElement(o);
    }

    public void removeElement(Object o) {
	vector.removeElement(o);
    }
    
    public Set copy() {
	Set destSet = new Set();
	Enumeration enum = vector.elements();
	while (enum.hasMoreElements())
	    destSet.addElement(enum.nextElement());
	return destSet;
    }
    
    public Set union(Set s) {
	Set unionSet = copy();
	Enumeration enum = s.vector.elements();
	while (enum.hasMoreElements())
	    unionSet.addElement(enum.nextElement());
	return unionSet;
    }
    
    public Set intersection(Set s) {
	Set interSet = new Set();
	Enumeration enum = vector.elements();
	while (enum.hasMoreElements()) {
	    Object elem = enum.nextElement();
	    if (s.contains(elem))
		interSet.addElement(elem);
	}
	return interSet;
    }

    public Set difference(Set s) {
	Set diffSet = copy();
	Enumeration enum = s.vector.elements();
	while (enum.hasMoreElements()) 
	    diffSet.removeElement(enum.nextElement());
	return diffSet;
    }

    public Enumeration elements() {
	return vector.elements();
    }
    
    public String toString() {
	String res = "";
	Enumeration enum = vector.elements();
	while (enum.hasMoreElements())
	    res = res + enum.nextElement() + " ";
	return res;
    }
    
    public boolean equals(Object o) {
	Set s = (Set)o;

	Enumeration e = s.elements();
	while (e.hasMoreElements()) 
	    if (!this.contains(e.nextElement())) return false;

	e = this.elements();
	while (e.hasMoreElements())
	    if (!s.contains(e.nextElement())) return false;
	
	return true;
    }

    Vector vector;
}
