#include<stdio.h>
#include<iostream>
#include<queue>
using namespace std;
#define MAX 100
#define initial 1
#define visited 2
int arr[MAX][MAX],n,topo_order[MAX],indeg[MAX]={0};
queue<int> myque;
void createGraph()
{
printf("enter the number of edges : ");
scanf("%d",&n);
int i,src,dest,edge=n*(n-1);
for(i=0;i<edge;i++)
{
printf("enter the source and destination or(-1,-1) to quit : ");
scanf("%d %d",&src,&dest);
if(src==-1 && dest==-1)
break;
else if(src>=n||src<0||dest>=n||dest<0)
{
printf("invalid input\n");
i--;
}
else
{
arr[src][dest]=1;
indeg[dest]++;
}
}
}
void toposort()
{
int i,count=0,v,j=0;
for(i=0;i<n;i++)
if(indeg[i]==0)
myque.push(i);
while(!myque.empty() && count<n)
{
v=myque.front();
topo_order[j]=v;
j++;
myque.pop();
for(i=0;i<n;i++)
{
if(arr[v][i]==1)
{
arr[v][i]=0;
indeg[i]--;
if(indeg[i]==0)
myque.push(i);
}
}
}
for(i=0;i<n;i++)
printf("%d ",topo_order[i]);
}
int main()
{
createGraph();
toposort();
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHF1ZXVlPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgTUFYIDEwMAojZGVmaW5lIGluaXRpYWwgIDEKI2RlZmluZSB2aXNpdGVkICAyCgppbnQgYXJyW01BWF1bTUFYXSxuLHRvcG9fb3JkZXJbTUFYXSxpbmRlZ1tNQVhdPXswfTsKCnF1ZXVlPGludD4gbXlxdWU7Cgp2b2lkIGNyZWF0ZUdyYXBoKCkKewogICAgcHJpbnRmKCJlbnRlciB0aGUgbnVtYmVyIG9mIGVkZ2VzIDogIik7CiAgICBzY2FuZigiJWQiLCZuKTsKICAgIGludCBpLHNyYyxkZXN0LGVkZ2U9bioobi0xKTsKICAgIGZvcihpPTA7aTxlZGdlO2krKykKICAgIHsKICAgICAgICBwcmludGYoImVudGVyIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG9yKC0xLC0xKSB0byAgcXVpdCA6ICIpOwogICAgICAgIHNjYW5mKCIlZCAlZCIsJnNyYywmZGVzdCk7CiAgICAgICAgaWYoc3JjPT0tMSAmJiBkZXN0PT0tMSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZWxzZSBpZihzcmM+PW58fHNyYzwwfHxkZXN0Pj1ufHxkZXN0PDApCiAgICAgICAgewogICAgICAgICAgICBwcmludGYoImludmFsaWQgaW5wdXRcbiIpOwogICAgICAgICAgICBpLS07CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGFycltzcmNdW2Rlc3RdPTE7CiAgICAgICAgICAgIGluZGVnW2Rlc3RdKys7CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIHRvcG9zb3J0KCkKewogICAgaW50IGksY291bnQ9MCx2LGo9MDsKICAgIGZvcihpPTA7aTxuO2krKykKICAgICAgICBpZihpbmRlZ1tpXT09MCkKICAgICAgICAgICAgbXlxdWUucHVzaChpKTsKICAgIHdoaWxlKCFteXF1ZS5lbXB0eSgpICYmIGNvdW50PG4pCiAgICB7CiAgICAgICAgdj1teXF1ZS5mcm9udCgpOwogICAgICAgIHRvcG9fb3JkZXJbal09djsKICAgICAgICBqKys7CiAgICAgICAgbXlxdWUucG9wKCk7CiAgICAgICAgZm9yKGk9MDtpPG47aSsrKQogICAgICAgIHsKICAgICAgICAgICAgaWYoYXJyW3ZdW2ldPT0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhcnJbdl1baV09MDsKICAgICAgICAgICAgICAgIGluZGVnW2ldLS07CiAgICAgICAgICAgICAgICBpZihpbmRlZ1tpXT09MCkKICAgICAgICAgICAgICAgICAgICBteXF1ZS5wdXNoKGkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZm9yKGk9MDtpPG47aSsrKQogICAgICAgIHByaW50ZigiJWQgIix0b3BvX29yZGVyW2ldKTsKfQoKCmludCBtYWluKCkKewogICAgY3JlYXRlR3JhcGgoKTsKICAgIHRvcG9zb3J0KCk7CiAgICByZXR1cm4gMDsKfQo=