some depth first graph traversal