public class Cons implements Li {
	Object hd;
	Li tl;
	
	public Cons(Object hd, Li tl) {
		super();
		this.hd = hd;
		this.tl = tl;
	}
	@Override
	public boolean isEmpty() {
		return false;
	}
	@Override
	public int länge() {
		return tl.länge()+1;
	}
	@Override
	public Li add(Li m) {
		return new Cons(hd,tl.add(m));
	}
	@Override
	public Li mult(Li that) {
		return tl.mult(that).add(that);
	}
	@Override
	public String toString() {
		return "["+hd+tl.toStringAux();
	}
	public String toStringAux() {
		return ", "+hd+tl.toStringAux();
	}
	public static void main(String[] args) {
		Li n0 = new Empty();
		Li n1 = new Cons("a",n0);
		Li n2 = new Cons("b",n1);
		Li n3 = new Cons("c",n2);
		Li n4 = new Cons("d",n3);
		Li n16= n4.mult(n4);
		Li n17= n16.add(n1);
		Li n42= n17.add(n4).mult(n2);
		System.out.println(n42.länge());
		System.out.println(n4);
		System.out.println(n16);
	}
}
