爆0!
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e3+10,eps=1e-8;
vector<int>g[N];
int st[N][N],d[N],du[N];
bool vis[N];
double f[N][N];
void spfa(int s){
memset(d,0x3f,sizeof(d));
memset(vis,0,sizeof(vis));
queue<int>q;
vis[s]=1;
d[s]=0;
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=0;i<g[u].size();i++){
int v=g[u][i];
if(!vis[i]&&d[v]>d[u]+1){
q.push(v);
st[v][s]=u;
d[v]=d[u]+1;
vis[v]=1;
}else if(d[v]==d[u]+1&&st[v][s]>u)st[v][s]=u;
}
}
}
double dfs(int c,int m){
cout<<c<<" m="<<m<<endl;
if(c==m)return 0;
if(st[c][m]==m||st[st[c][m]][m]==m)return 1;
if(fabs(f[c][m])>=eps)return f[c][m];
double r=dfs(st[st[c][m]][m],m);
for(int i=0;i<g[m].size();i++)r+=dfs(st[st[c][m]][m],g[m][i]);
f[c][m]=r/(du[m]+1)+1;
return f[c][m];
}
int main(){
int n,e,c,m;
cin>>n>>e>>c>>m;
for(int i=1;i<=e;i++){
int u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
du[u]++;
du[v]++;
}
for(int i=1;i<=n;i++)spfa(i);
printf("%.3lf",dfs(c,m));
return 0;
}