7301 - 道路规划(road)

小A所在的岛上一共有 n 座城市,城市之间一共有 m 条单向道路连接,保证这些道路不会形成环路,也就是不存在从某座城市出发,经过一系列的道路最终又回到原点的情况。

出于某种原因,小A需要从起点城市 s 前往城市 t,可能会有许多种不同的路径。小A想知道途径的可能的城市(除s、 t外)中,哪一个城市对他是最重要的,换句话说,从 s 到 t 的所有路径中,需要经过哪个城市的路径条数最多。

给定一个 n 个点 m 条边的有向无环图,所有点的编号从 1 到 n,给出一个起点 s 和一个终点 t,求出一个点 ans,使得经过 ans 的从 s 到 t 的路径最多。

输出这个点 ans 和具体的路径数,如果有多个点经过的数量相同,取编号最小的那一个;如果 s 不能到达 t,或从 s 到 t 的路径中间不能途径其他点,输出 -1。

输入

从文件road.in中读入数据。

输入的第一行包含 4 个整数,分别为 n,m,s,t,表示点数、边数、起点和终点。

接下来 m 行,每行 2 个整数 u、v,表示存在一条从 u 到 v 的有向路径。

输出

输出到文件road.out中。

输出仅1 行。如果 s 不可达 t,或中间不能途径其他点,输出 -1;否则输出两个数字,表示最重要的点的编号和经过它的路径条数。

样例

输入

5 10 1 5
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5

输出

2 4

提示

样例图如下,起点是1,终点是5: 经过 2 的路径最多,一共有 4 条:{1,2,3,5},{1,2,4,5},{1,2,5},{1,2,3,4,5}。经过3的路径也有4条{1,2,3,5},{1,3,5},{1,3,4,5},{1,2,3,4,5},不过2编号更小。

来源

青少年编程挑战赛

时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题