some combination and permutation related algorithms.