vector<int> toposort(int n, vector<vector<int>> adj) {
vector<int> sorted;
vector<int> indegree(n);
for (int i=0; i < n; i++) {
for (int nextNode: adj[i]) {
indegree[nextNode]++;
}
}
queue<int> q;
for (int i=0; i < n; i++) {
if (indegree[i] == 0)
q.push(i);
}
while (!q.empty()) {
int node = q.front();
q.pop();
sorted.push_back(node);
for (int nextNode: adj[node]) {
indegree[nextNode]--;
if (indegree[nextNode] == 0)
q.push(nextNode);
}
}
return sorted;
}