depth-first-search design divide-and-conquer dynamic-programming enumeration graph-theory greedy ...