void main(){
  import std.stdio, std.string, std.conv, std.algorithm;
  import std.typecons;

  int n; rd(n);
  int m; rd(m);

  auto lose=new int[](n), g=new int[][](n);
  foreach(i; 0..m){
    int a, b; rd(a, b);
    g[a-1]~=(b-1);
    lose[b-1]++;
  }

  bool multi=false;
  auto used=new bool[](n);
  foreach(_; 0..n){
    int[] cand;
    foreach(i; 0..n){
      if(used[i]) continue;
      if(lose[i]>0) continue;
      cand~=i;
    }
    if(cand.length>1) multi=true;
    auto i=cand[0];
    foreach(j; g[i]) lose[j]--;
    writeln(i+1);
    used[i]=true;
  }

  if(multi) writeln(1);
  else writeln(0);
}
void rd(T...)(ref T x){
  import std.stdio, std.string, std.conv;
  auto l=readln.split;
  assert(l.length==x.length);
  foreach(i, ref e; x){
    e=l[i].to!(typeof(e));
  }
}

