/*
TASK:trade
LANG:C++
*/
#include<iostream>
using namespace std;
int a[1500][1500],pr[1500],kp[1500],N,M;
double cpr[1500],ckp[1500];
double dfs(int n)
 {
      double k=0;
      int i;
      //printf("%d\n",n);
      if(n==0)return 1;
      if(cpr[n]==0)
      {
      for (i=0;i<=N;i++)
          {if(a[i][n]==1){/*printf("%d %d\n",i,n);system("pause");*/k+=dfs(i);if(n==1);}}
      if(pr[n]!=0)cpr[n]=(double)k/(double)kp[n]+(double)1/(double)pr[n];
      if(pr[n]==0)cpr[n]=(double)k/(double)kp[n];
            //if(n==7)printf("k:%lf kp[n]:%d pr[n]:%d cpr[n]:%lf",k,kp[n],pr[n],cpr[n]);
      }
      return cpr[n];
      }
int main()
{
    int i,j,k,u,v;
    double d,min=1000;
    scanf("%d%d",&N,&M);
    for (i=0;i<M;i++)
        {
        scanf("%d%d",&u,&v);
        a[u][v]=1;
        }
    for(i=0;i<=N;i++)
                     for (j=0;j<=N;j++)
                         if(a[i][j]){kp[j]++;pr[i]++;}
//    for(i=0;i<=N;i++)
//    printf("i:%d kp:%d pr:%d\n",i,kp[i],pr[i]);
    for (i=0;i<=N;i++)
        if (pr[i]==0)
           {
           d=dfs(i);
           if(d<min)min=d;
           }
//    for(i=0;i<=N;i++)
 //                    printf("%d %lf\n",i,cpr[i]);
    printf("%lf\n",min);
//    system("pause");
    return 0;
}
/*void dfs(n)
{
     stack<double> st;
     for (;k!=0;)
         {
         for (i=0;i<br[k];i++)
             {
                              st.push(a[k][i])
             }
         b[i=]
         k=st.top();
         k=st.pop();
         }
 */
 
          
             
