package chelper; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.Queue; import io.InputReader; import io.OutputWriter; public class L { int[] bfs(List> edges, int from) { int n = edges.size(); int[] res = new int[n]; Arrays.fill(res, n + 100); res[from] = 0; boolean[] visited = new boolean[n]; visited[from] = true; Queue queue = new LinkedList<>(); queue.add(from); while (!queue.isEmpty()) { int a = queue.poll(); for (int b : edges.get(a)) { if (!visited[b]) { res[b] = res[a] + 1; visited[b] = true; queue.add(b); } } } return res; } public void solve(int testNumber, InputReader in, OutputWriter out) { int n = in.nextInt() + 1; int m = in.nextInt(); int a = in.nextInt(); int b = in.nextInt(); List> edges1 = new ArrayList<>(); List> edges2 = new ArrayList<>(); for (int i = 0; i < n; i++) { edges1.add(new ArrayList<>()); edges2.add(new ArrayList<>()); } for (int i = 0; i < m; i++) { int v1 = in.nextInt(); int v2 = in.nextInt(); edges1.get(v1).add(v2); edges2.get(v2).add(v1); } int[] toPivot = bfs(edges1, 0); int[] fromA = bfs(edges2, a); int[] fromB = bfs(edges2, b); int res = n + 100; for (int i = 0; i < n; i++) { res = Math.min(res, toPivot[i] + fromA[i] + fromB[i]); } out.println(res); } }