public class Tree {
    // OVERVIEW: A Tree is a mutable tree where the nodes are int values.
    //    A typical Tree is < value, [ children ] > 
    //       where value is the int value of the root of the tree
    //         and children is a sequence of zero or more Tree objects
    //            that are the children of this tree node.
    //    A Tree may not contain cycles, and may not contain the same
    //    Tree object as a sub-tree in more than one place.

    public Tree (int val) {
	// EFFECTS: Creates a tree with value val and no children: < value, [] >
    }

    public void addChild (Tree t) {
	// REQUIRES: t is not contained in this.
	// MODIFIES: this
	// EFFECTS: Adds t to the children of this, as the rightmost child:
	//    this_post = < this_pre.value, children > 
	//      where children = [ this_pre.children[0], this_pre.children[1], ..., 
	//                         this_pre.children[this_pre.children.length - 1], t ]
	//    NOTE: the rep is exposed!
    }

    public Tree getChild (int n) {
	// REQUIRES: 0 <= n < children.length
        // EFFECTS: Returns the Tree that is the nth leftmost child 
	//    of this.
	//    NOTE: the rep is exposed!
    }
}