+-------------------------+
     | Traversal<T>            |
     +-------------------------+
     | boolean      isEmpty()  |
     | T            getFirst() |
     | Traversal<T> getRest()  |
     +-------------------------+
          / \            / \
          ---            ---
           |              |
      +------------+      +------------------+
      | IList<T>   |<-+                      |
      +------------+  |               +---------------------------------------------------+
          / \         |               | ArrLT<T>                                          |
          ---         +-------------+ +---------------------------------------------------+
           |                        | | ArrayList<T> arrlist                              |
    -------------------             | | int          first                                |
    |                 |             | +---------------------------------------------------+
+-----------+    +----------------+ | | public ArrLT<T>(ArrayList<T> arrlist)             |
| MTList<T> |    | ConsList<T>    | | | private ArrLT<T>(ArrayList<T> arrlist, int first) |
+-----------+    +----------------+ | +---------------------------------------------------+
                 | T        first | |
                 | IList<T> rest  |-+
                 +----------------+
                                              +----------------------------------------------------+
                                              | Algorithms                                         |
           +-----------------------------+    +----------------------------------------------------+
           | ISelect<T>                  |    | boolean contains(Traversal<T> tr, ISelect<T> pick) |
           +-----------------------------+    | int    countSuch(Traversal<T> tr, ISelect<T> pick) |
           | boolean select(T t)         |    +----------------------------------------------------+
           +-----------------------------+
            / \                       / \
            ---                       ---
             |                         |
+---------------------------+  +---------------------------+
| <Balloon>                 |  | <Balloon>                 |
| RedBalloon                |  | SmallBalloon              |
+---------------------------+  +---------------------------+
| boolean select(Balloon b) |  | boolean select(Balloon b) |
+---------------------------+  +---------------------------+

    
 
+----------
| Examples
+--------------
| Traversal<Balloon> blist: ConsList<Balloon> |
...
| ISelect<Balloon> redBalloon: RedBalloon
...
| Algorithms algo: Algorithms
|......................
| algo.contains(blist, redBalloon) -> boolean |
...