public class LinkedForest<T> extends Forest<T> {
	private class Node implements ForestCursor<T> {
		public T element;
		public Node elderSon;
		public Node junior;
		
		public Node(T element) {
			this(null, element, null);
		}
		public Node(Node elderSon, T element, Node junior) {
			this.element = element;
			this.elderSon = elderSon;
			this.junior = junior;
		}
	}
	
	private Node root_;
	private int size_;
	
	public LinkedForest(T element) {
		this.root_ = new Node(element);
		this.size_ = 1;
	}
	public LinkedForest(LinkedForest<T> daughter, T element, LinkedForest<T> sister) {
		this.root_ = new Node(daughter.root_, element, sister.root_);
		this.size_ = daughter.size() + sister.size() + 1;
		daughter.root_ = null;
		daughter.size_ = 0;
		sister.root_ = null;
		sister.size_ = 0;
	}

	public LinkedForest() {
		this.root_ = null;
		this.size_ = 0;
	}
	
	@Override
	public int size() {
		return this.size_;
	}

	@Override
	public ForestCursor<T> root() {
		return this.root_;
	}

	@Override
	public ForestCursor<T> toElderSon(ForestCursor<T> c) {
		return ((Node)c).elderSon;
	}

	@Override
	public ForestCursor<T> toJunior(ForestCursor<T> c) {
		return ((Node)c).junior;
	}

	@Override
	public T getElement(ForestCursor<T> c) {
		return ((Node)c).element;
	}

}
