{
TASK:trade
LANG:PASCAL
}
var
a:array[0..1001,0..1001]of real;{DA PROMENQ!!!}
queue:array[0..1001]of integer;
j,k,l,sum,br,nula,min:real;
n,m,i,x,y,tek,h:integer;
t:text;
procedure mamut(gr:integer);
var
i,j:integer ;
begin
  k:=0;
  br:=0;
  sum:=0;
  for j:=0 to n do
   begin
    if a[gr,j]=-1 then
     begin
      sum:=sum+a[j,gr];
      br:=br+1;
     end;
    if a[gr,j]=1 then
     k:=k+1;
    end;
    if (k=0)and(sum<>0) then
     begin
      tek:=tek+1;
      queue[tek]:=gr;

      end
      else
     begin
      for i:=0 to n do
       if a[gr,i]=1 then
        a[gr,i]:=sum/br+1/k;
      end;
end;
procedure alex(gr:integer);
begin
      sum:=0;
      br:=0;
      for i:=0 to n do
      begin

       if a[gr,i]=-1 then
        begin
         sum:=sum+a[i,gr];
         br:=br+1;

        end;
      end;
      a[gr,1001]:=a[gr,1001]+sum/br;


end;
begin
 readln(n,m);
 for i:=1 to m do
  begin
   read(x,y);
   a[x,y]:=1;
   a[y,x]:=-1;
  end;
  for i:=1 to n-1 do
   mamut(i);
 for h:=1 to tek do
  alex(queue[h]);
nula:=0;
min:=99999;
for i:=1 to n do
 begin
  if (a[i,1001]<>nula)and(a[i,1001]<min) then
   min:=a[i,1001];
 end;
 writeln(min:8:6);
end.