#icpc2014autumnf. [icpc2014autumn_f]Reverse a Road II

[icpc2014autumn_f]Reverse a Road II

问题描述

JAG王国是一个奇怪的王国,它的N个城市只通过单行道连接。这N个城市的编号从1到N。国际特征产品公司(ICPC)每天将其产品从S市的工厂运送到JAG王国的T市的仓库。为了提高效率,ICPC同时使用多辆卡车。每辆卡车从S出发,在单行道网络上通过一些城市(或直接)到达T。为了减少交通堵塞和事故的风险,任何两辆卡车都不能走相同的路。

现在,ICPC希望在上述限制下尽可能多地提高每日运输的效率。JAG王国的财政受到ICPC的巨大影响,考虑改变单行道的方向,以增加ICPC每日运输的卡车数量。由于逆转许多道路会引起混乱,JAG王国决定最多逆转一条道路。

如果没有这样的道路,使得逆转道路可以提高运输效率,那么JAG王国就不需要逆转任何道路。检查是否逆转一条道路可以提高当前每日运输的最大卡车数。如果可以,计算单行道可以逆转时采用不相交道路集合的最大卡车数,以及可以选择作为实现最大值的逆转道路的道路数。

输入

输入包含多个数据集。数据集的数量不超过100。

每个数据集的格式如下所示。

N M S T
a_1 b_1
a_2 b_2
:
:
a_M b_M

每个数据集的第一行包含四个整数:城市数量N(2 ≤ N ≤ 1,000),道路数量M(1 ≤ M ≤ 10,000),工厂所在城市S和仓库所在城市T(1 ≤ S, T ≤ N,S ≠ T)。

接下来的M行描述了道路的信息。其中第i行包含两个整数a_i和b_i(1 ≤ a_i, b_i ≤ N,a_i ≠ b_i),表示第i条道路是从a_i到b_i的有向道路。

输入的结束由一行包含四个零表示。

输出

对于每个数据集,按照以下格式,在一行中输出两个整数,用一个空格分隔:如果逆转一条道路可以提高当前每日运输的最大卡车数,那么第一个输出整数是逆转一条道路后的新最大值,第二个输出整数是可以选择作为逆转道路以实现新最大值的道路数。否则,即如果当前最大值无法通过逆转道路增加,那么第一个输出整数是当前最大值,第二个输出整数是0。

样例输入

4 4 1 4
1 2
3 1
4 2
3 4
7 8 1 7
1 2
1 3
2 4
3 4
4 5
4 6
5 7
7 6
6 4 5 2
1 2
1 3
4 5
5 6
10 21 9 10
9 1
9 2
9 3
9 4
10 1
10 2
10 3
10 4
1 5
2 5
2 6
3 6
3 7
4 7
4 8
1 8
5 10
6 10
7 10
10 8
10 9
2 15 1 2
1 2
1 2
1 2
1 2
1 2
1 2
1 2
1 2
1 2
1 2
1 2
1 2
1 2
1 2
1 2
0 0 0 0```

### 样例输出

```plain
1 2
2 1
0 0
4 6
15 0```

### 来源名称

JAG Practice Contest for ACM-ICPC Asia Regional 2014