1class Solution:2def sortItems(3self, n: int, m: int, group: List[int], beforeItems: List[List[int]]4) -> List[int]:5before = {i: set() for i in range(n)}6after = {i: set() for i in range(n)}7beforeG = {i: set() for i in range(m)}8afterG = {i: set() for i in range(m)}9groups = {i: set() for i in range(m)}10qg = collections.deque()11lazy = collections.deque()12for i in range(n):13if group[i] != -1:14groups[group[i]].add(i)15for x in beforeItems[i]:16before[i].add(x)17after[x].add(i)18if group[x] != group[i] and group[x] != -1 and group[i] != -1:19beforeG[group[i]].add(group[x])20afterG[group[x]].add(group[i])21for i in range(n):22if group[i] == -1 and not before[i]:23lazy.append(i)2425for i in range(m):26if not beforeG[i]:27qg.append(i)28ans = []29while qg:30while lazy:31i = lazy.popleft()32ans.append(i)33for j in after[i]:34before[j].remove(i)35if not before[j] and group[j] == -1:36lazy.append(j)37g = qg.popleft()38q = collections.deque()39for member in groups[g]:40if not before[member]:41q.append(member)42while q:43i = q.popleft()44ans.append(i)45groups[g].remove(i)46for j in after[i]:47before[j].remove(i)48if not before[j]:49if group[j] == g:50q.append(j)51if group[j] == -1:52lazy.append(j)53if groups[g]:54return []55for p in afterG[g]:56beforeG[p].remove(g)57if not beforeG[p]:58qg.append(p)59while lazy:60i = lazy.popleft()61ans.append(i)62for j in after[i]:63before[j].remove(i)64if not before[j] and group[j] == -1:65lazy.append(j)66return ans if len(ans) == n else []