Suppose, I have N distinct integers. I have to make M non-empty sets using these integers. An integer may not present in any of the sets and an integer can present in only one of the M sets. I have to print all possible ways to make M sets using these N integers.
For example, if I have N = 3 integers which are 1, 2 and 3, then there are 6 possible ways to make M = 2 sets:
1. {1} {2}
2. {1} {3}
3. {2} {3}
4. {1,2} {3}
5. {1,3} {2}
6. {1} {2,3}
How can I find out the number of ways to make M sets using N distinct integers according to the rule given above? What is the most efficient way to print all the possible ways?
I tried to solve this problem using dynamic programming, but I am having trouble to define DP states.