added N choose K combination framework