/*
TASK:trade
LANG:C++
*/
#include <stdio.h>
#define MAXV 1005
int dag[MAXV][MAXV], from[MAXV], to[MAXV], N, M;
static double price[MAXV];


double get_pr(int d)
{
    int i; double sum=0.0;
    if(price[d]<0.0)
    {
       for(i=0;i<to[d];i++) 
           sum=sum+get_pr(dag[d][N-i]);
       sum=sum/to[d];
       if(from[d]>0) sum=sum+1.0/from[d];
       price[d]=sum;    
    }
    return price[d];       
}
int main()
{
      double min=1000000000.0;
      int i,j,k,b,e;
      scanf("%d %d",&N,&M);
      for(i=0;i<=N;i++) {from[i]=to[i]=0;price[i]=(double) -1.0;}
      for(i=1;i<=M;i++)
      {
         scanf("%d %d",&b,&e);
         dag[b][++from[b]]=e;
         dag[e][N-to[e]++]=b;                  
      }                  
      price[0]=1.0; 
      for(i=1;i<=N;i++)
      {
         if(from[i]==0)
         {
            double x=get_pr(i);
            if(x<min) min=x;           
         }                             
      }
      printf("%.6lf\n",min);
      return 0;
}
