#include using namespace std; #define ALL(x) begin(x),end(x) #define rep(i,n) for(int i=0;i<(n);i++) #define debug(v) cout<<#v<<":";for(auto x:v){cout<bool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(b ostream &operator<<(ostream &os,const vector&v){ for(int i=0;i<(int)v.size();i++) os< istream &operator>>(istream &is,vector&v){ for(T &x:v)is>>x; return is; } signed main(){ int n,m,a,b;cin>>n>>m>>a>>b;a--,b--; vector l(m),r(m); rep(i,m){ cin>>l[i]>>r[i]; } for(auto &x:l) x--; for(auto &x:r) x--; vector> g(n+1); rep(i,m){ g[l[i]].push_back(r[i]+1); g[r[i]+1].push_back(l[i]); } vector d(n+1,INF); using P=pair; priority_queue,greater

> que; rep(i,a+1){ d[i]=0; que.push(P(d[i],i)); } while(!que.empty()){ auto [x,now]=que.top();que.pop(); for(auto to:g[now]){ if(chmin(d[to],x+1)){ que.push(P(d[to],to)); } } } // debug(d); int res=INF; for(int i=b+1;i<=n;i++) chmin(res,d[i]); cout<<(res>=INF?-1:res)<