I'm creating an app that receives some map between finals and the respective periods during which they are held and a student's required finals. I was wondering if there was an algorithm to enumerate all complete schedulings of these finals. Concretely, I have a list of finals for a specific student and each $F_i$ has a list of periods $P_i$ that they are held. In my specific use case, there are $8$ periods.
$$ \begin{align} F_1 &\rightarrow \{P_1, P_2, P_8\} \\ F_2 &\rightarrow \{P_4, P_7\} \\ F_3 &\rightarrow \{P_4\} \end{align} $$
And I want to find all assignments of periods to finals that are non-overlapping and complete, i.e. the student can attend all finals. One such assignment could be:
$$ \begin{align} P_1 &\rightarrow F_1 \\ P_4 &\rightarrow F_3 \\ P_7 &\rightarrow F_2 \end{align} $$
This is complete because all finals are associated to a period and the periods are non-overlapping. Another assignment could be $P_4 \rightarrow F_3, P_7 \rightarrow F_2, P_8 \rightarrow F_1$. My question is then, how could I enumerate all these assignments? I was thinking of a greedy approach whereby I choose a period starting with the finals with the fewest amount of available periods, the choosing for the next-most restricted final. But that only gives me one particular working schedule, not all valid schedulings.