cache
combinations then permutations