def METHOD_NAME(self):
    sccs = []
    cur = []
    def postv(i):
        nonlocal cur
        cur.append(i)
    def nt():
        nonlocal cur
        if cur:
            sccs.append(cur)
            cur = []
    self.dfs(order=self.rpo(), post=postv, next_tree=nt, edges=self.preds)
    nl_list = []
    for cand in sccs:
        if len(cand) > 1:
            nat = True
            header = -1
            for b in cand:
                for p in self.preds[b]:
                    if p not in cand:
                        if header == -1:
                            header = b
                        else:
                            nat = False
                            break
            if nat:
                cand.remove(header)
                nl_list.append([header] + cand)
    return nl_list