class LinkedSet<E> implements Set<E> {

  private LinkedSetElem<E> ll = null;

  private class LinkedSetElem<E> {
    private E value;
    private LinkedSetElem<E> next;

    public LinkedSetElem(E item, LinkedSetElem<E> next) {
      value = item;
      this.next = next;
    }

    public boolean contains(E item) {
      if ( item.equals(value) ) return true;
      else if (next == null) return false;
      else return next.contains(item);
    }

    public LinkedSetElem<E> remove(E item) {
      if ( next != null ) next = next.remove(item);
      if ( item.equals(value) ) return next;
      else return this;
    }
  }

  public boolean contains(E item) {
    if (ll == null) return false;
    else return ll.contains(item); 
  }
  
  public void add(E item)  {
    ll = new LinkedSetElem<E>(item, ll);
  }
  
  public void remove(E item) {
    if (ll != null) ll = ll.remove(item);
  }
}
