public class List<E> {
  private E head;
  private List<E> tail;

  public E getHead() {
    return head;
  }

  public List<E> getTail() {
    return tail;
  }

  public List(E head, List<E> t) {
    this.head = head;
    tail = t;
  }

  public int length() {
    if (tail == null) {
      return 1;
    } else {
      return 1 + tail.length();
    }
  }

  public void print() {
    System.out.println(head);
    if (tail != null) {
      tail.print();
    }
  }

  public static void main(String a[]) {
    List<Integer> l1 = new List<Integer>(1, null);
    List<Integer> l2 = new List<Integer>(2, l1);
    List<Integer> l3 = new List<Integer>(3, l2);
    System.out.println(l3.length());
    l3.print();
  }
}
