





from collections import defaultdict







class      lowerCamelCase:
     '''simple docstring'''


     def __init__(    self				,     snake_case_				,     snake_case_							):
         _A     =							total  # total no of tasks (N)

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

         _A     =							defaultdict(snake_case_							)  # 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     =							(1 << len(snake_case_							)) - 1




     def        lowerCAmelCase__		(    self				,     snake_case_				,     snake_case_							):
         # if mask == self.finalmask all persons are distributed tasks, return 1
         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     =							self.count_ways_until(snake_case_				,     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     =							total_ways_util

         return self.dp[mask][task_no]




     def        lowerCAmelCase__		(    self				,     snake_case_							):
         # Store the list of persons for each task
         for i in range(len(snake_case_							)							):
             for j in task_performed[i]:
                 self.task[j].append(snake_case_							)

        # 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__":
 __A							:			Optional[int]         =			5  # total no of tasks (the value of N)

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









import json
from typing import List, Optional, Tuple

from tokenizers import normalizers

from ....tokenization_utils_fast import PreTrainedTokenizerFast
from ....utils import logging
from .tokenization_retribert import RetriBertTokenizer


SCREAMING_SNAKE_CASE__					:     List[str]       =     logging.get_logger(__name__)

SCREAMING_SNAKE_CASE__					:     Optional[int]       =     {'vocab_file': 'vocab.txt', 'tokenizer_file': 'tokenizer.json'}

SCREAMING_SNAKE_CASE__					:     List[Any]       =     {
    'vocab_file': {
        'yjernite/retribert-base-uncased': (
            'https://huggingface.co/yjernite/retribert-base-uncased/resolve/main/vocab.txt'
        ),
    },
    'tokenizer_file': {
        'yjernite/retribert-base-uncased': (
            'https://huggingface.co/yjernite/retribert-base-uncased/resolve/main/tokenizer.json'
        ),
    },
}

SCREAMING_SNAKE_CASE__					:     Tuple       =     {
    'yjernite/retribert-base-uncased': 512,
}


SCREAMING_SNAKE_CASE__					:     Optional[Any]       =     {
    'yjernite/retribert-base-uncased': {'do_lower_case': True},
}


class 		_SCREAMING_SNAKE_CASE     (						A     ):
     __SCREAMING_SNAKE_CASE     					=    VOCAB_FILES_NAMES
     __SCREAMING_SNAKE_CASE     					=    PRETRAINED_VOCAB_FILES_MAP
     __SCREAMING_SNAKE_CASE     					=    PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
     __SCREAMING_SNAKE_CASE     					=    PRETRAINED_INIT_CONFIGURATION
     __SCREAMING_SNAKE_CASE     					=    RetriBertTokenizer
     __SCREAMING_SNAKE_CASE     					=    ['''input_ids''', '''attention_mask''']


     def __init__(  self							,					A_=None							,					A_=None							,					A_=True							,					A_="[UNK]"							,					A_="[SEP]"							,					A_="[PAD]"							,					A_="[CLS]"							,					A_="[MASK]"							,					A_=True							,					A_=None							,					**A_							,					):
       super().__init__(
           A_							,					tokenizer_file=A_							,					do_lower_case=A_							,					unk_token=A_							,					sep_token=A_							,					pad_token=A_							,					cls_token=A_							,					mask_token=A_							,					tokenize_chinese_chars=A_							,					strip_accents=A_							,					**A_							,					)

       _UpperCAmelCase		:							List[str]							=     json.loads(self.backend_tokenizer.normalizer.__getstate__()    )
       if (
           normalizer_state.get("""lowercase"""							,					A_    ) != do_lower_case
           or normalizer_state.get("""strip_accents"""							,					A_    ) != strip_accents
           or normalizer_state.get("""handle_chinese_chars"""							,					A_    ) != tokenize_chinese_chars
       ):
         _UpperCAmelCase		:							str							=     getattr(A_							,					normalizer_state.pop("""type"""    )    )
         _UpperCAmelCase		:							Optional[int]							=     do_lower_case
         _UpperCAmelCase		:							List[Any]							=     strip_accents
         _UpperCAmelCase		:							List[str]							=     tokenize_chinese_chars
         _UpperCAmelCase		:							Dict							=     normalizer_class(**A_    )

       _UpperCAmelCase		:							Dict							=     do_lower_case


     def        __snake_case(  self							,					A_							,					A_=None    ):
       _UpperCAmelCase		:							Tuple							=     [self.cls_token_id] + token_ids_a + [self.sep_token_id]

       if token_ids_a:
         output += token_ids_a + [self.sep_token_id]

       return output


     def        __snake_case(  self							,					A_							,					A_ = None    ):
       _UpperCAmelCase		:							List[Any]							=     [self.sep_token_id]
       _UpperCAmelCase		:							Tuple							=     [self.cls_token_id]
       if token_ids_a is None:
         return len(cls + token_ids_a + sep    ) * [0]
       return len(cls + token_ids_a + sep    ) * [0] + len(token_ids_a + sep    ) * [1]




     def        __snake_case(  self							,					A_							,					A_ = None    ):
       _UpperCAmelCase		:							Dict							=     self._tokenizer.model.save(A_							,					name=A_    )
       return tuple(A_    )





