class Solution: def smallestSufficientTeam(self, req_skills: List[str], people: List[List[str]]) -> List[int]: m = len(req_skills) dp = [99999] * (1 « m) fr = [None] * (1 « m) dp[0] = 0 for pi, p in enumerate(people): skills = 0 for s in p: try: idx = req_skills.index(s) skills |= 1 « idx except Exception: continue for i in range(1 « m): if dp[i | skills] > dp[i] + 1: dp[i | skills] = dp[i] + 1 fr[i | skills] = (i, pi) result = [] stat = (1 « m) - 1 while stat > 0: result.append(fr[stat][1]) stat = fr[stat][0] return result