Depth-first Iterative Deepening: An Optimal Admissible Tree Search