#930. 排序牛

排序牛

问题描述

农民John注意到,当他的N(1<=N<=1500)头牛排成一行挤奶时。确定的牛经常排在确定的其他牛前面。他制作了一张L对牛的表格。他想把这张表格给他的朋友农民Bob看。不幸的,这交织在一起的网络很慢。

John认识到,他可以通过减少多余的信息来压缩表格。他有的信息都是像“牛A在牛B的前面”。例如,Alice在Betty前面,Betty在Carol前面,Alice在Carol前面。最后一条是多余的。当然,牛被编号成连续的号码,从1..N。只有少数有名字(不被使用)。

帮助John找到最小的子集,可以推出其它。答案唯一。最初的表格没有矛盾的信息,如Alice在Betty前面,Betty在Alice前面。

程序名:order

输入:

第1行:两个整数:N L

第2..L+1行:每行两个整数X Y(1<=X,y<=N),表示X在Y前。无重复。

输出:

第1行:整数U,结果行数。

第2..U+1行:每行两个数字。第1列数字按顺序。

样例:

5 6
3 5
4 2
5 2
2 1
3 1
4 1
4
2 1
3 5
4 2
5 2

注:3在1前,4在1前可推。输出的每一行,不能被其他推出。