import java.util.Iterator;

class Node {
  int val;
  Node next = null;
  Node(int val) {
    this.val = val;
  }
}

interface List extends Iterable<Integer> {
  void prepend(int val);
}

class ListIterator implements Iterator<Integer> {
  Node head, cur;
  public ListIterator(Node head) {
    this.head = head;
    cur = head;
  }
  public boolean hasNext() {
    return cur != null;
  }
  public Integer next() {
    Node p = cur;
    cur = cur.next;
    return p.val;
  }
  public void remove() {
    throw new UnsupportedOperationException();
  }
}

class ListImpl implements List {
  private Node head = null;
  public void prepend(int val) {
    Node q = new Node(val);
    q.next = head;
    head = q;
  }
  public Iterator<Integer> iterator() {
    return new ListIterator(head);
  }
}

public class ListIteratorTest {
  public static void main(String[] args) {
    List l1 = new ListImpl();
    l1.prepend(6);
    l1.prepend(5);
    l1.prepend(4);
    l1.prepend(3);
    l1.prepend(2);
    l1.prepend(1);

    // Iterator<Integer> it = l1.iterator();
    // while(it.hasNext()) {
    //  Integer i = it.next();
    //  Out.println(i.intValue());
    // }
    
    for(Integer i: l1) {
      Out.println(i);
    }
  }
}

