number partitioning problem