Depth First Algorithm