#include<stdio.h>
int q[100010];
int topo(int v,int e,int *a,int *b){
  int ta[100010],nt[200010];
  int i,t,r,c[200010]={0};
  for(i=0;i<e;i++)c[b[i]]++;
  for(i=r=0;i<v;i++){
    ta[i]=-1;
    if(c[i]==0)q[r++]=i;
  }
  for(i=0;i<v;i++){
    nt[i]=ta[a[i]];
    ta[a[i]]=i;
  }
  for(t=0;t<v;t++){
    for(i=ta[q[t]];i+1;i=nt[i]){
      c[b[i]]--;
      if(c[b[i]]==0)q[r++]=b[i];
    }
  }
}
int main(){
  int v,e,m,i,s,a[100010],b[100010],c[100010];
  scanf("%d %d",&v,&e);
  for(i=0;i<e;i++)scanf("%d %d",&a[i],&b[i]);
  topo(v,e,a,b);
  for(i=0;i<v;i++)printf("%d\n",q[i]);
  return 0;
}