#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int ts;
int n,m,s,t,f[N];
vector<int> vec[N];
bool vis[N];
void bfs(int st){
queue<int> q;
q.push(st);
f[st]=0; vis[st]=1;
while(!q.empty()){
int tp=q.front(); q.pop();
//cout<<tp<<':';
for(int i=0;i<vec[tp].size();i++){
int nxt=vec[tp][i];
if(f[nxt]>f[tp]+1&&!vis[nxt]){
//cout<<nxt<<' ';
f[nxt]=f[tp]+1;
vis[nxt]=1;
q.push(nxt);
}
}
//cout<<endl;
}
}
int main(){
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin>>ts;
while(ts--){
cin>>n>>m>>s>>t;
memset(vis,0,sizeof(vis));
memset(f,0x3f,sizeof(f));
for(int i=0;i<n;i++) vec[i].clear();
for(int i=1;i<=m;i++){
int u,v; cin>>u>>v;
vec[u].push_back(v);
vec[v].push_back(u);
}
bfs(t);
int ans=1e9;
for(int i=0;i<n;i++){
//cout<<i<<':'<<f[i]<<endl;
int now;
if(i>s) now=f[i]+i;
else if(i<s) now=f[i]+i+1;
else now=f[i];
ans=min(ans,now);
}
cout<<ans<<endl;
}
return 0;
}
RT,计算得出的时间复杂度是O(T(n+m))