from collections import deque def bfs(starts): dist=[INF]*(N+1) next_set=deque() for start in starts: next_set.append((start,0)) dist[start]=0 while next_set: p,t=next_set.popleft() for q in edges[p]: if dist[q]!=INF: continue dist[q]=t+1 next_set.append((q,t+1)) return dist ############################################## N,M,A,B=map(int, input().split()) A-=1 B-=1 INF=10**18 res=INF starts=[] edges=[[] for _ in range(N+1)] for _ in range(M): l,r=map(int, input().split()) l-=1 r-=1 if l<=A: starts.append(l) edges[l].append(r+1) elif A<=l<=B: edges[l].append(r+1) edges[r+1].append(l) dist=bfs(starts) for i in range(B+1,N+1): res=min(dist[i],res) print(res if res!=INF else -1)