So the reason this works is if you delete vertices from a directed acyclic graph it remains directed acyclic, right you cannot create a cycle just by throwing out some stuff, so every time through the recursion we can find a sink SCC because it has no outgoing arcs to the graph that still have to be assigned labels, there's no way that there's going to be any violations of the topological ordering. 