finished everything except method to generate every combination and yield them