#https://tjkendev.github.io/procon-library/python/graph/bridge.html def bridge(G, N): result = set() label = [None]*N gen = 0 cost = [0]*N def dfs(u, p): nonlocal gen res = 0 for v, _ in G[u]: if v == p: continue if label[v] is not None: if label[v] < label[u]: cost[v] += 1 res += 1 else: label[v] = gen; gen += 1 r = dfs(v, u) if r == 0: result.add(_) res += r res -= cost[u] return res for v in range(N): if not label[v]: label[v] = gen; gen += 1 r = dfs(v, -1) assert r == 0, r return result n, m, s, t = list(map(int, input().split())) s, t = s-1, t-1 node = [[] for _ in range(n)] E = [1] * m for _ in range(m): u, v = list(map(lambda x: int(x)-1, input().split())) node[u].append((v, _)) node[v].append((u, _)) result = bridge(node, n) for i in result: E[i] = 0 D = [-1 for _ in range(n)] F = [-1] * n B = [s] D[s] = 0 F[s] = 0 while A := B: B = [] for now in A: cnt = F[now] for nxt, idx in node[now]: ncnt = cnt + E[idx] if D[nxt] == -1: D[nxt] = D[now] + 1 B.append(nxt) F[nxt] = ncnt elif D[nxt] == D[now] + 1: F[nxt] = max(F[nxt], ncnt) print(F[t])