/*
TASK:trade
LANG:C++
*/

#include <iostream>
using namespace std;

int A[1001][1001];
double P[1001];
int N,R=1000;

void Read();
void Solve();
double GetX(int p);

int main()
{
 Read();
 Solve();
 
 return 0;
}

void Read()
{
 int M,i,y,x;
 
 cin>>N>>M;
 
// for(i=0;i<N;i++) P[i]=0;
 
 for(i=0;i<M;i++)
 {
  cin>>y>>x;
  A[y][x]=1;
  A[y][N+1]++;
 }
 
 P[0]=1;
 P[1000]=32000;
}

double GetX(int p)
{
 int i;
 double s=0,k=0;
 
 for(int i=0;i<N;i++)
  if(A[i][p])
  {
   if(P[i]==0) return -1;
   k++;
   s+=P[i];
  }
  
  return s/k;
}

void Solve()
{
 int flag=1,i;
 double x;
 
 while(flag)
 {
  flag=0;
  
  for(i=0;i<N;i++)
  {
   if(P[i]==0)
    if(A[i][N+1])         //distributor
    {
     flag=1;
     x=GetX(i);
     if(x!=-1)
      P[i]=x+(1/(double)A[i][N+1]);
    }
    else                  //prodava4
    {
     flag=1;
     x=GetX(i);
     if(x!=-1) {P[i]=x; if(P[i]<P[R]) R=i;}
    }
  }
  
 }
 
 cout.precision(6);
 cout.setf(ios::fixed);
 cout<<P[R]<<endl;
}
