hzCPPOJ

工艺流程

时间限制:  1 s      内存限制:   128 MB
提交:19     正确:12     分值:98

题目描述

某工厂的生产工艺流程可以分为N个步骤,其中有些步骤之间存在一定的先后次序,用有序对<a,b>表明步骤a需要在步骤b之前完成,我们称步骤a是步骤b的前驱步骤,反之称步骤b为步骤a的后续步骤。一个步骤可能存在若干个(也可以是0个)前驱步骤。如果步骤x的前驱步骤为0,那么该步骤可以直接开始,无需等待,如果步骤x存在前驱步骤,那么需要等其所有前驱步骤都完成后,才能进行步骤x的生产。整个生产工艺流程可以选择其中任意一个没有前驱步骤的工艺流程步骤开始,当一个步骤的所有前驱步骤都完成了,才能被选择开始该步骤,如果同时存在多个满足上述条件的步骤时,可以任意选择其中一个满足条件的步骤进行生产,然后继续上述规则进行选择,直到所有步骤被选择。同一个步骤列表中的步骤号不能重复,步骤号个数等于N。两个步骤列表之间只有某个位置上的步骤号不同就是不同的步骤列表,(整个生产工艺流程编排过程类似图的拓扑排序)

现在已知生产工艺流程需要的步骤N,以及步骤之间存在的先后次序关系列表,请分析出该生产工艺流程中存在的有效步骤列表数量。例如:步骤N=4,步骤关系为<1,2><3,2><2,4>,则说明步骤1在步骤2之前完成,步骤3在步骤2之前完成,步骤2在步骤4之前完成。其中步骤1和步骤3的前驱步骤都为0,可以任意选择其中一个步骤开始生产流程,步骤的前驱步骤有步骤1和步骤3,所以要等步骤1和步骤3都完成后,才能开始步骤2生产流程,步骤4的前驱步骤是步骤2,所以步骤2完成后,可以进行步骤4的生产流程。那么该生产工艺流程中存在的有效步骤列表为:1 3 2 4;3 1 2 4,共两种。所以输出数量2。


输入

1行步骤数N(N<10),步骤号的有序对数M(M<20)

输入M行有序对

输出

所有满足条件的有效步骤列表数量

样例

样例输入:
4 3 1 2 3 2 2 4
样例输出:
2

提交人

spiritatu