Final optimization: No need to recompute block position
Proper backtracking: keeping track of last move per (Board,level) tuple