Deals with combinations of entities belonging to a finite set in accordance with certain constraints.