vector<int> findOrder(int n, vector<vector<int>>& prerequisites) {
vector<vector<int>>adj(n);
vector<int>indegree(n,0);
for(auto& pre : prerequisites) {
adj[pre[1]].push_back(pre[0]);
indegree[pre[0]]++;
}
queue<int>q;
for(int i=0;i<n;i++)
if(indegree[i]==0)
q.push(i);
int count=0;
vector<int>ans;
if(q.size()==0)
return ans;
while(!q.empty())
{
int node=q.front();
q.pop();
ans.push_back(node);
count++;
for(auto it: adj[node])
{
indegree[it]--;
if(indegree[it]==0)
q.push(it);
}
}
if(count!=n)
return {};
return ans;
}