- Create a deck of cards (freedom on which data structure can be used)
- Shuffle the deck
- Deal cards from the shuffled deck to a specified number of players
- Allow players to exchange cards with the dealer if they don't like their cards (like in poker)
Similar kind of problem here: https://leetcode.com/problems/shuffle-an-array/solution/