The towers of Hanoi puzzle: problems, algorithms and their analysis