#include<bits/stdc++.h>
using namespace std;
int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=0;ch=getchar();
}
while(isdigit(ch)){
x=x*10+ch-'0';ch=getchar();
}
return f?x:-x;
}
const int N = 5100;
vector<int> G[N];
double a[N][N],f[N],x[N];
void Gauss(int n){
for(int i = 1;i <= n;i++)
{
int maxn = i;
for(int j = i+1;j <= n;j++)
{
if(fabs(a[maxn][i]) < fabs(a[j][i]))
maxn = j;
}
if(maxn != i){
for(int j = 1;j <= n+1;j++)
swap(a[maxn][j],a[i][j]);
}
for(int j = 1;j <= n;j++)
{
if(j==i) continue;
double temp = a[j][i]/a[i][i];
for(int k = 1+i;k <= n+1;k++)
{
a[j][k] -= temp*a[i][k];
// cout<<a[j][k]<<" ";
}
// cout<<endl;
}
}
for(int i = 1;i <= n;i++)
// cout<<a[i][i]<<" ",
x[i] = a[i][n+1]/a[i][i];
}
int n,m,st[N],ed[N],d[N];
int main(){
n=read();m=read();
for(int i = 1;i <= m;i++){
st[i] = read();
ed[i] = read();
G[ed[i]].push_back(st[i]);
G[st[i]].push_back(ed[i]);
++d[st[i]];++d[ed[i]];
}
for(int i = 1;i < n;i++)
{
a[i][i] = 1.0;
for(int j = 0;j < G[i].size();j++)
{
int v = G[i][j];
if(v!=n)
a[i][v] = -1.0/d[v];
}
}
a[1][n] = 1.0;
Gauss(n-1);
for(int i = 1;i <= m;i++){
int a=st[i],b=ed[i];
if(a!=n) f[i]+=x[a]/d[a];
if(b!=n) f[i]+=x[b]/d[b];
}
sort(f+1,f+1+m);
double ans=0;
for(int i = 1;i <= m;i++)
ans+=(m-i+1)*f[i];
printf("%.3lf\n",ans);
return 0;
}
WA了一半