#include<bits/stdc++.h>
#include<stdio.h>
#include<string.h>
#define REG register
#define INL inline
#define P 998244353
#define LL long long
using namespace std;
int t[2005],las[2005],fir[1005],num;
INL void add(REG int u,REG int v){
t[++num]=v;
las[num]=fir[u];
fir[u]=num;
}
int n,m;
int ca,ra;
INL void read(REG int& x){
x=0;
REG char c=getchar();
while(c<'0'||c>'9')c=getchar();
while('/'<c&&c<':'){
x=x*10+c-'0';
c=getchar();
}
}
int dis[1005][1005];
int vis[1005];
void bfs(int root){
queue<int> q;
q.push(root);
while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=1;
for(int i=fir[u];i;i=las[i]){
if(vis[t[i]])continue;
q.push(t[i]);
dis[root][t[i]]=dis[root][u]+1;
}
}
}
int mv[1005][1005];
double dp[1005][1005];
int oud[1005];
double dfs(int x,int y){
if(x == y) return 0;
if(mv[x][y] ==y){
return 1;
}
if( dp[x][y] >= 0.0001) return dp[x][y];
double sum=dfs(mv[mv[x][y]][y],y);
for(int i=fir[y];i;i=las[i]){
sum+=dfs(mv[mv[x][y]][y],t[i]);
}
return dp[x][y]=sum/(oud[y]+1.0)+1.0;
}
signed main(){
read(n);
read(m);
read(ca);
read(ra);
for(REG int i=1;i<=m;i++){
REG int x,y;
read(x);
read(y);
add(x,y);
add(y,x);
oud[x]++;
oud[y]++;
}
for(REG int i=1;i<=n;i++){
memset(vis,0,sizeof vis);
bfs(i);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
mv[i][j]=i;
for(int k=fir[i];k;k=las[k]){
if(dis[mv[i][j]][j]>dis[t[k]][j]||(dis[mv[i][j]][j]==dis[t[k]][j] && mv[i][j]>t[k])){
mv[i][j]=t[k];
}
}
}
}
printf("%.3lf",dfs(ca,ra));
}