from collections import deque, defaultdict, Counter from bisect import bisect_left, bisect_right from itertools import permutations, combinations, groupby from heapq import heappop, heappush import math, sys input = lambda: sys.stdin.readline().rstrip("\r\n") def printl(li, sep=" "): print(sep.join(map(str, li))) def yn(flag): print(Yes if flag else No) _int = lambda x: int(x)-1 MOD = 998244353 #10**9+7 INF = 1<<60 Yes, No = "Yes", "No" import pypyjit, sys pypyjit.set_param('max_unroll_recursion=-1') sys.setrecursionlimit(10**6) def find_bridges(n, edges): """ n: 頂点数 edges: (u, v) のリスト return: 各辺が橋なら1, そうでなければ0のリスト """ E = [[] for _ in range(n)] for i, (u, v) in enumerate(edges): E[u].append((v, i)) E[v].append((u, i)) ord = [-1] * n low = [-1] * n is_bridge = [0] * len(edges) timer = 0 def dfs(u, parent_edge_id=-1): nonlocal timer ord[u] = low[u] = timer timer += 1 for v, edge_id in E[u]: if edge_id == parent_edge_id: continue if ord[v] != -1: low[u] = min(low[u], ord[v]) else: dfs(v, edge_id) low[u] = min(low[u], low[v]) if ord[u] < low[v]: is_bridge[edge_id] = 1 for i in range(n): if ord[i] == -1: dfs(i) return is_bridge def ctypes(li, types): assert len(li) == len(types) return [t(a) for a, t in zip(li, types)] def tinput(*types): li = input().split() return ctypes(li, types) def qinput(*types): li = input().split() t = int(li[0]) if len(li) == 1: return t, types[t-1][0](li[1]) else: return t, ctypes(li[1:], types[t-1]) N, M, si, ti = tinput(int, int, _int, _int) edges = [] for _ in range(M): u, v = map(_int, input().split()) edges.append((u, v)) bridge = find_bridges(N, edges) E = [[] for _ in range(N)] for i in range(M): u, v = edges[i] E[u].append((v, bridge[i])) E[v].append((u, bridge[i])) q = deque([si]) vis = [-1]*N vis[si] = 0 while q: i = q.popleft() for j, e in E[i]: if vis[j] >= 0: continue vis[j] = vis[i]+(e^1) q.append(j) print(vis[ti])