# トポロジカルソート
def tp_sort(i,res,called,hash)
  called[i] = true
  Array(hash[i]).each do |j|
    tp_sort(j,res,called,hash) unless called[j]
  end
  res << i
end

n = gets.to_i
m = gets.to_i
# チームiに対して勝っているチームを配列で表す.hash[i] = [j,k]など。
hash = {}
m.times do
  a = gets.split(" ").map(&:to_i)
  hash[a[1]] = [] if hash[a[1]].nil?
  hash[a[1]] << a[0]
end

# トポロジカルソートを呼び出したかどうかをチェックする
called = Array.new(n+1) {false}

res = []

1.upto(n) do |i|
  tp_sort(i,res,called,hash) unless called[i]
end

puts res

# 他に可能な順位表があるかどうか
other = 0
1.upto(n-1) do |i|
  other = 1 if hash[res[i]].nil? || !hash[res[i]].include?(res[i-1])
end

puts other