import sys # sys.setrecursionlimit(200005) # sys.set_int_max_str_digits(200005) int1 = lambda x: int(x)-1 pDB = lambda *x: print(*x, end="\n", file=sys.stderr) p2D = lambda x: print(*x, sep="\n", end="\n\n", file=sys.stderr) def II(): return int(sys.stdin.readline()) def LI(): return list(map(int, sys.stdin.readline().split())) def LLI(rows_number): return [LI() for _ in range(rows_number)] def LI1(): return list(map(int1, sys.stdin.readline().split())) def LLI1(rows_number): return [LI1() for _ in range(rows_number)] def SI(): return sys.stdin.readline().rstrip() dij = [(0, 1), (-1, 0), (0, -1), (1, 0)] # dij = [(0, 1), (-1, 0), (0, -1), (1, 0), (1, 1), (1, -1), (-1, 1), (-1, -1)] # inf = -1-(-1 << 31) inf = -1-(-1 << 62) # md = 10**9+7 md = 998244353 n,m,s,g=LI() s-=1 g-=1 to=[[] for _ in range(n)] uv=[] for _ in range(m): u,v=LI1() to[u].append(v) to[v].append(u) uv.append((u,v)) def dfs(root=0): uu = [root] dfsOrder[root] = 0 lowlink[root] = 0 eulerTour.append(root) # !!! to's format stack = [(root, v) for v in to[root]] while stack: u, v = stack.pop() if v == -1: p = parent[u] if lowlink[u] < lowlink[p]: lowlink[p] = lowlink[u] eulerTour.append(p) right[u] = len(uu) elif dfsOrder[v] == -1: parent[v] = u depth[v] = depth[u]+1 dfsOrder[v] = len(uu) uu.append(v) stack.append((v, -1)) # !!! to's format for nv in to[v]: if nv == u: continue stack.append((v, nv)) lowlink[v] = dfsOrder[v] eulerTour.append(v) dfsTree[u].append(v) else: if dfsOrder[v] < lowlink[u]: lowlink[u] = dfsOrder[v] right[root] = len(uu) return uu # vの親がpのときlow[v]>ord[p]だと橋 lowlink = [n]*n eulerTour = [] dfsTree = [[] for _ in range(n)] right = [-1]*n # left = dfsOrder parent, depth, dfsOrder = [-1]*n, [0]*n, [-1]*n dfs() to=[[] for _ in range(n)] for u,v in uv: c=n-1 if lowlink[u]>dfsOrder[v] or lowlink[v]>dfsOrder[u]:c=n to[u].append((v,c)) to[v].append((u,c)) from heapq import * def dijkstra(to, root=0): n = len(to) dist = [inf]*n dist[root] = 0 hp = [(0, root)] while hp: d, u = heappop(hp) if d > dist[u]: continue for v, c in to[u]: nd = d+c if dist[v] <= nd: continue dist[v] = nd heappush(hp, (nd, v)) return dist dist=dijkstra(to,s) d=dist[g] d%=n print(-d%n)