/*
TASK:trade
LANG:C
*/
#include <stdio.h>
#define N 100
int a[N+3][N+3]={0,0};
double prise[N+3]={0};
int n;
double rec (int);
int main ()
{
    int i,j,m,x,y;
    double min=1000000000,tmp=0;
    scanf ("%d %d",&n,&m);
    for (i=0;i<m;i++)
        {
            scanf ("%d %d",&x,&y);
            a[x][y]=1; //x -> y
            a[y][x]=-1; // y <- x
        }
    prise[0]=1;
    for (i=1;i<=n;i++)
        {
            for (j=1;j<=n;j++)
                if (a[i][j]==1) break;
            if (j>n)
                {
                    tmp=rec (i);
                    if (tmp<min) min=tmp;
                }
        }
    printf ("%.6lf\n",min);
    return 0;
}

double rec (int p)
{
    int i,j,brv=0;
    double sum=0,brd=0;
    for (i=0;i<=n;i++)
        {
            if (a[p][i]==-1) 
                {
                brv++;
                if (!prise[i]) prise[i]=rec(i);
                sum+=prise[i]; 
                }
            else if (a[p][i]==1) brd+=1;
        }
    sum/=(double)brv;
    if (brd) 
        {
            brd=1/brd;
            sum+=brd;
        }
    return sum;
}
