'''simple docstring'''




from collections import defaultdict






class 				a__:


			'''simple docstring'''






			def __init__(   self       ,    __lowerCAmelCase       ,    __lowerCAmelCase):




					"""simple docstring"""


					lowerCAmelCase   					=  total  # total no of tasks (N)

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

					lowerCAmelCase   					=  defaultdict(__lowerCAmelCase)  # 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
					lowerCAmelCase   					=  (1 << len(__lowerCAmelCase)) - 1



			def 							a_       (   self       ,    __lowerCAmelCase       ,    __lowerCAmelCase):




					"""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
					lowerCAmelCase   					=  self.count_ways_until(__lowerCAmelCase       ,    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.
					lowerCAmelCase   					=  total_ways_util

					return self.dp[mask][task_no]







			def 							a_       (   self       ,    __lowerCAmelCase):




					"""simple docstring"""


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

        # 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          =  5  # total no of tasks (the value of N)

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





'''simple docstring'''




from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_flax_available,
    is_tf_available,
    is_torch_available,
)


__lowercase          =  {
    '''configuration_resnet''': ['''RESNET_PRETRAINED_CONFIG_ARCHIVE_MAP''', '''ResNetConfig''', '''ResNetOnnxConfig''']
}

try:
						if not is_torch_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						__lowercase          =  [
						    '''RESNET_PRETRAINED_MODEL_ARCHIVE_LIST''',
						    '''ResNetForImageClassification''',
						    '''ResNetModel''',
						    '''ResNetPreTrainedModel''',
						    '''ResNetBackbone''',
						]

try:
						if not is_tf_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						__lowercase          =  [
						    '''TF_RESNET_PRETRAINED_MODEL_ARCHIVE_LIST''',
						    '''TFResNetForImageClassification''',
						    '''TFResNetModel''',
						    '''TFResNetPreTrainedModel''',
						]

try:
						if not is_flax_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						__lowercase          =  [
						    '''FlaxResNetForImageClassification''',
						    '''FlaxResNetModel''',
						    '''FlaxResNetPreTrainedModel''',
						]

if TYPE_CHECKING:
						from .configuration_resnet import RESNET_PRETRAINED_CONFIG_ARCHIVE_MAP, ResNetConfig, ResNetOnnxConfig

						try:
												if not is_torch_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .modeling_resnet import (
												    RESNET_PRETRAINED_MODEL_ARCHIVE_LIST,
												    ResNetBackbone,
												    ResNetForImageClassification,
												    ResNetModel,
												    ResNetPreTrainedModel,
												)

						try:
												if not is_tf_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .modeling_tf_resnet import (
												    TF_RESNET_PRETRAINED_MODEL_ARCHIVE_LIST,
												    TFResNetForImageClassification,
												    TFResNetModel,
												    TFResNetPreTrainedModel,
												)

						try:
												if not is_flax_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .modeling_flax_resnet import FlaxResNetForImageClassification, FlaxResNetModel, FlaxResNetPreTrainedModel


else:
						import sys

						__lowercase          =  _LazyModule(__name__, globals()['''__file__'''], _import_structure)




