import java.util.*;

public class TravellerList implements TravellerListUtils {

  protected DNode head, tail;

  public TravellerList(){
	  head = null;
	  tail = null;
  }

  public void addTraveller(Object o){
	  DNode newNode = new DNode (o);
	  if (head == null){
		  head  = newNode;
		  tail = newNode;
	  } else {
		  newNode.setPrev(tail);
		  tail.setNext(newNode);
		  tail = newNode;
	  }
  }

  private class lifoIterator implements Enumeration{
	  private DNode currNode;

	  public lifoIterator(){
		currNode = tail;
	  }

	  public boolean hasMoreElements(){
		  return (currNode != null);
  	  }

  	  public Object nextElement(){
		  Object c = currNode;
		  currNode = currNode.getPrev();
		  return( (DNode)c).getData();
	  }

  }

  private class fifoIterator implements Enumeration{
	  private DNode currNode;

	  public fifoIterator(){
		currNode = head;
	  }

	  public boolean hasMoreElements(){
		  return (currNode != null);
  	  }

  	  public Object nextElement(){
		  Object c = currNode;
		  currNode = currNode.getNext();
		  return( (DNode)c).getData();
	  }

  }

  private class pfifoIterator implements Enumeration{
	  private DNode currNode;

	  public pfifoIterator(){
		currNode = head;
		while ((currNode !=null) && (! (currNode.getData() instanceof ElitePassenger))){
			currNode = currNode.getNext();
		}
	  }

	  public boolean hasMoreElements(){
		  return (currNode != null);
  	  }

  	  public Object nextElement(){
		  Object c = currNode;
		  currNode = currNode.getNext();
		  while ((currNode !=null) && (! (currNode.getData() instanceof ElitePassenger))){
			currNode = currNode.getNext();
		  }
		  return( (DNode)c).getData();
	  }

  }

  public Enumeration lifoIterator(){
      return new lifoIterator();
  }

  public Enumeration fifoIterator(){
  	  return new fifoIterator();
  }

  public Enumeration pfifoIterator(){
	  return new pfifoIterator();
  }

  public String toString(){
	  return("This is a TravellerList.");
  }

}
