你在森林里。森林里有一对麋鹿——一头母鹿(成年雌性)和她的小鹿(幼崽)。众所周知,夹在母鹿和小鹿之间是很危险的,但并不总是清楚如何避免这种情况。
我们将森林建模为包含 $N$ 个地点和 $M$ 条连接这些地点的直接连线。这些连线可以双向通行。地点编号为 $0$ 到 $N - 1$,连线编号为 $0$ 到 $M - 1$。
我们将从母鹿到小鹿的路径定义为一系列地点 $p_0, p_1, p_2 \dots p_k$,满足:
- $p_0$ 是母鹿所在的位置。
- $p_k$ 是小鹿所在的位置。
- 对于每个满足 $0 \le i < k$ 的 $i$,地点 $p_i$ 和 $p_{i+1}$ 之间存在一条直接连线。
- 第 3 点中提到的连线在路径中不会重复。注意,我们允许路径中重复经过某些地点。
显然,任何位于此类路径上的地点都是危险的,因为母鹿可能会认为你处于她和小鹿之间。你的任务是找到所有安全的地点,即那些不在任何此类路径上的地点。
输入格式
第一行包含四个整数 $N, M, A, B$。$N$ 和 $M$ 分别是地点数和直接连线数,$A$ 和 $B$ 分别是母鹿和小鹿当前所在的位置。接下来有 $M$ 行,编号从 $0$ 到 $M - 1$,描述了 $M$ 条连线。其中第 $i$ 行包含两个整数 $U_i, V_i$,表示第 $i$ 条连线连接地点 $U_i$ 和 $V_i$。
输出格式
输出的第一行应包含一个整数 $S$,表示森林中安全地点的数量。 接下来的 $S$ 行应列出所有安全地点,每行一个,按数值递增顺序排列。
数据范围
$2 \le N \le 50\,000$ $2 \le M \le 100\,000$ 对于所有 $i$,$0 \le U_i, V_i < N$ 对于所有 $i$,$U_i \neq V_i$ 任意两个地点之间最多只有一条直接连线。 母鹿到小鹿之间始终至少存在一条路径。
| 子任务 | 分值 | 其他约束 |
|---|---|---|
| 子任务 1 | 10 | $N \le 10; M \le 45$ |
| 子任务 2 | 20 | $M = N - 1$ 且图是连通的 |
| 子任务 3 | 30 | $N \le 200; M \le 500$ |
| 子任务 4 | 40 | 无其他约束 |
样例
样例输入 1
9 10 0 7 1 0 2 0 0 3 5 4 4 3 4 6 3 6 6 7 7 3 7 8
样例输出 1
4 1 2 5 8
说明 1
该图如下图所示,母鹿位于地点 $0$,小鹿位于地点 $7$。
样例输入 2
8 8 2 3 0 1 0 2 1 2 2 3 3 4 3 5 4 5 6 7
样例输出 2
2 6 7