#include using namespace std; #include //using namespace atcoder; using ll = long long; using ull = unsigned long long; using i128 = __int128_t; using u128 = unsigned __int128_t; using mint = atcoder::static_modint<998244353>; const int mod = 998244353; #include mt19937_64 rng(std::chrono::steady_clock::now().time_since_epoch().count()); int dx[8] = {-1, 1, 0, 0, -1, -1, 1, 1}; int dy[8] = {0, 0, -1, 1, -1, 1, -1, 1}; template bool chmin(T& a, const T& b){ if (b < a){ a = b; return true; } else { return false; } } template bool chmax(T& a, const T& b){ if (a < b){ a = b; return true; } else { return false; } } void solve(){ int n, m, a, b; cin >> n >> m >> a >> b; a--; vector> vec(n + 1); for (int i = 0; i < m; i++){ int u, v; cin >> u >> v; u--; vec[u].push_back(v); vec[v].push_back(u); } vector dist(n + 1, 1e9); queue q; for (int i = 0; i <= a; i++){ q.push(i); dist[i] = 0; } while(!q.empty()){ int x = q.front(); q.pop(); for (auto d : vec[x]){ if (dist[d] > dist[x] + 1){ dist[d] = dist[x] + 1; q.push(d); } } } int ans = 1e9; for (int i = b; i <= n; i++){ chmin(ans, dist[i]); } cout << (ans == 1e9 ? -1 : ans) << '\n'; }; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int t = 1; while(t--){ cout << fixed << setprecision(15); solve(); } }