#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=2e5+10;
inline int read()
{
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
int n,m;
struct Edge
{
int to,fr,nt;
}e[maxn*2];
int head[maxn],cnt;
inline void update(int x,int y)
{
e[++cnt].nt=head[x];
e[cnt].fr=x;
e[cnt].to=y;
head[x]=cnt;
}
int deg[maxn];
double eq[510][510];
inline void Gauss()
{
for(int i=1;i<n;i++)
{
int index=i;
for(int j=i;j<n;j++)
{
if(fabs(eq[j][i]>fabs(eq[index][i])))
index=j;
}
for(int j=1;j<=n;j++)
{
swap(eq[index][j],eq[i][j]);
}
for(int j=1;j<n;j++)
{
if(j==i)
continue;
double temp=eq[j][i]/eq[i][i];
for(int k=i+1;k<=n;k++)
{
eq[j][k]-=eq[i][k]*temp;
}
}
}
}
double Ex[maxn];
double Ex_edge[maxn*2];
int main()
{
n=read(),m=read();
for(int i=1;i<=m;i++)
{
int x,y;
x=read(),y=read();
update(x,y);
update(y,x);
deg[x]++;
deg[y]++;
}
for(int x=1;x<n;x++)
{
for(int i=head[x];i;i=e[i].nt)
{
int y=e[i].to;
if(y==n)
continue;
eq[x][y]=(1.00/(deg[x]*1.00));
}
eq[x][x]=-1.00;
}
eq[1][n]=-1.00;
Gauss();
for(int i=1;i<n;i++)
{
Ex[i]=eq[i][n]/eq[i][i];
}
int num=1;
for(int i=1;i<=m;i++)
{
Ex_edge[i]=Ex[e[num].fr]/(1.00*deg[e[num].fr])+Ex[e[num].to]/(1.00*deg[e[num].to]);
num+=2;
}
sort(Ex_edge+1,Ex_edge+1+m);
double res=0.00;
for(int i=1;i<=m;i++)
{
int trans=m-i+1;
res+=Ex_edge[i]*(1.00*trans);
}
printf("%.3lf\n",res);
return 0;
}