





from collections import defaultdict





class  A__    :




   """simple docstring"""



   def __init__(					self					,  lowercase					,  lowercase)			->						Dict:







          '''simple docstring'''

          a__						:	Optional[int] =				total  # total no of tasks (N)

          # DP table will have a dimension of (2^M)*N
          # initially all values are set to -1
          a__						:	List[str] =				[
              [-1 for i in range(total + 1)] for j in range(2 ** len(lowercase))
          ]

          a__						:	Optional[int] =				defaultdict(lowercase)  # 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
          a__						:	Optional[int] =				(1 << len(lowercase)) - 1

   def 							__lowercase		(					self					,  lowercase					,  lowercase)			->						str:







          '''simple docstring'''

          if mask == self.final_mask:
                 return 1

          # if not everyone gets the task and no more tasks are available, return 0
          if task_no > self.total_tasks:
                 return 0

          # if case already considered
          if self.dp[mask][task_no] != -1:
                 return self.dp[mask][task_no]

          # Number of ways when we don't this task in the arrangement
          a__						:	str =				self.count_ways_until(lowercase					,  task_no + 1)

          # now assign the tasks one by one to all possible persons and recursively
          # assign for the remaining tasks.
          if task_no in self.task:
                 for p in self.task[task_no]:
                        # if p is already given a task
                        if mask & (1 << p):
                               continue

                        # assign this task to p and change the mask value. And recursively
                        # assign tasks with the new mask value.
                        total_ways_util += self.count_ways_until(mask | (1 << p)					,  task_no + 1)

        # save the value.
          a__						:	int =				total_ways_util

          return self.dp[mask][task_no]

   def 							__lowercase		(					self					,  lowercase)			->						Optional[int]:







          '''simple docstring'''

          for i in range(len(lowercase)):
                 for j in task_performed[i]:
                        self.task[j].append(lowercase)

        # 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__":
    lowercase      :       Union[str, Any]									=  5  # total no of tasks (the value of N)

    # the list of tasks that can be done by M persons.
    lowercase      :       Tuple									=  [[1, 3, 4], [1, 2, 5], [3, 4]]
    print(
        AssignmentUsingBitmask(task_performed, total_tasks).count_no_of_ways(
            task_performed
        )
    )









def A_	(		A__		,      A__				)  ->		str:
       if a < 0 or b < 0:
              raise ValueError('the value of both inputs must be positive'				)

       a__						:	List[str] =				str(bin(A__				)				)[2:]  # remove the leading "0b"
       a__						:	Optional[int] =				str(bin(A__				)				)[2:]  # remove the leading "0b"

       a__						:	List[str] =				max(len(A__				)		,      len(A__				)				)

       return "0b" + "".join(
           str(int(char_a == '1' and char_b == '1'				)				)
           for char_a, char_b in zip(a_binary.zfill(A__				)		,      b_binary.zfill(A__				)				)				)


if __name__ == "__main__":
    import doctest

    doctest.testmod()


