{
TASK:trade
LANG:PASCAL
}
var
   i,j,n,m,x,y : LongInt;
   z,min : real;
   b : array[-1..1000,-1..1000] of byte;
   a : array[0..1000] of byte;
   kprod1,kprod2 : array[0..1000] of byte;
   prod : array[-1..1000] of real;
procedure rec(ii : LongInt;var yy : real);
var
   k,jj,l,br : LongInt;
   xx,sum : real;
begin
if prod[ii]>0 then begin yy:=prod[ii];exit;end;
br:=0;
sum:=0;
for jj:=0 to n do
 if b[ii,jj]=1
  then
   begin
    br:=br+1;
    rec(jj,xx);
    sum:=sum+xx;
    if br=b[ii,-1] then break;
   end;
if ii=i then begin yy:=sum/br;prod[ii]:=yy;exit;end;
 prod[ii]:=sum/br+1/a[ii];
 yy:=prod[ii];
end;
begin
readln(n,m);
for i:=1 to m do
 begin
  readln(x,y);
  kprod1[y]:=1;
  kprod2[x]:=1;
  b[y,x]:=1;
  a[x]:=a[x]+1;
  b[y,-1]:=b[y,-1]+1;
 end;
min:=99999;
prod[0]:=1;
 for i:=1 to n do
  if (kprod1[i]=1) and (kprod2[i]=0)
   then
    begin
     rec(i,z);
     if z<min then min:=z;
    end;
writeln(min:1:6);
end.
