1function kahnTopoSort(n, edges) {
2 const inDegree = new Array(n).fill(0);
3 for (const [u, v] of edges) inDegree[v]++;
4 const queue = [];
5 for (let i = 0; i < n; i++) if (inDegree[i] === 0) queue.push(i);
6 const result = [];
7 while (queue.length) {
8 const node = queue.shift();
9 result.push(node);
10 for (const next of adj[node])
11 if (--inDegree[next] === 0) queue.push(next);
12 }
13 return result;
14}