W
```"""

This is a Python implementation for questions involving task assignments between people.
Here Bitmasking and DP are used for solving this.

Question :-
We have N tasks and M people. Each person in M can do only certain of these tasks. Also
a person can do only one task and a task is performed only by one person.
Find the total no of ways in which the tasks can be distributed.
"""
from collections import defaultdict

# DP table will have a dimension of (2^M)*N
# initially all values are set to -1
self.dp = [
[-1 for i in range(total + 1)] for j in range(2 ** len(task_performed))
]

self.task = defaultdict(list)  # stores the list of persons for each task

# final_mask is used to check if all persons are included by setting all bits
# to 1

return 1

# if not everyone gets the task and no more tasks are available, return 0
return 0

# Number of ways when we don't this task in the arrangement

# now assign the tasks one by one to all possible persons and recursively
# assign for the remaining tasks.

if mask & (1 << p):
continue

# assign this task to p and change the mask value. And recursively

# save the value.

# Store the list of persons for each task

# call the function to fill the DP table, final answer is stored in dp[0][1]
return self.count_ways_until(0, 1)

if __name__ == "__main__":

total_tasks = 5  # total no of tasks (the value of N)

# the list of tasks that can be done by M persons.
task_performed = [[1, 3, 4], [1, 2, 5], [3, 4]]
print(