As we wrap up this course in specialization, it's time for you to finish your poker project. You've written a lot of code in courses two and three, and now it's time to handle reading input in unknown cards, and bring it together by writing the main function, which will do the Monte Carlo simulation. One of these parts may seem a bit tricky. How do you handle unknown cards? It turns out that we can do this with concepts you have learned, pointers, arrays, and realloc. Here's a small input with two hands. The first has the King of Hearts and two unknown cards, the second has the Ace of Spades and two unknown cards. Both hands share question mark zero, so we have to make sure our implementation can ensure that both hands end up with the same value. Of course, real hands need at least five cards, but we're just going to draw a smaller example here to show you how this works. We'll make a structure to track unknown cards. Since we already have decks as a representation for sets of pointers to cards, we'll reuse that type here. Our unknown cards structure will have an array of decks, each deck will correspond to one particular variable, so question mark zero will correspond to one deck, question mark one to another, and so on. Unlike normal decks, each of these decks will point at placeholders in the hands, to show where to fill in later. Let's see this in action. Our first card is the King of Hearts. We will allocate space for hand one, and for this card. Our second card is question mark zero, we don't know its values yet, so we could send them to invalid values. That way if we ever mess up and don't change them, it will be easier to catch the mistake. Since this card is unknown, we're going to update our unknown cards structure, we'll allocate a deck to correspond to question mark zero, and make a one element array, whose value is a pointer to the card we just created. The next card is also unknown, so we will proceed similarly. We'll make a deck for question mark one, and make it's one element point at this placeholder card. Now we start on hand two. The first card is the Ace of Spades, the second is question mark zero, so it is unknown. So we will want to add an element to the deck for question mark zero, which points at this newly created placeholder card. The last card is also unknown, so we make a placeholder. Since it is question mark two, we will need to make a new deck and point it's one element at this placeholder card. Now, we need to be able to use this structure to assign random values to our placeholder cards. First, we need to know how many random cards to draw. In this case, we need three. But how do we know that in general? So, let us suppose we shuffle our deck and look at the top three cards, and find they the four of clubs, the Queen of Hearts, and the seven of clubs. How do we set the cards in the hands to these values? Well, everything that needs to be set to the four of clubs can be found from the pointers in the deck for question mark zero. So we can iterate through that array, and use these pointers that we find there to refer to the cards whose values we want to set to the four of clubs. Once we set these to the four of clubs, we want to repeat the process for the other unknown cards. For question mark one, we would use the pointers in it's deck to find the cards to change to the Queen of Hearts, and then the same thing for question mark two and the seven of clubs. If we wanted to repeat the process for another set of random cards we could, we just shuffle the deck and iterate through the unknown card structure again. With that, I think you you're ready to dive in and finish your project.