{
TASK:trade
LANG:PASCAL
}
var
arr:array[0..1000,-1..1000] of word;
cena:array[0..1000] of real;
poseten:array[0..1000] of byte;
distrib,prodava4:array[0..10000] of integer;
moment,min:real;
i,n,m,a,b,read1,write1:longint;
queue:array[1..1010] of record
                        num:integer;
                        checked:byte;
                        end;

function getxx(K:word):real;
var i:integer;
cena1:real;
begin
cena1:=0;
if poseten[k]=1 then getxx:=cena[k]
                else begin
                     for i:=1 to 1001-arr[k,-1] do cena1:=cena1+getxx(arr[k,1001-i]);
                     cena1:=cena1/(1001-arr[k,-1])+1/arr[k,0];
                     poseten[k]:=1;
                     cena[k]:=cena1;
                     getxx:=cena1;
                     end;
end;

function getx(k:word):real;
var i:integer;
cena1:real;
begin
cena1:=0;
for i:=1 to 1001-arr[k,-1] do cena1:=cena1+getxx(arr[k,1001-i]);
if arr[k,-1]=1001 then cena1:=10000000000000
                  else cena1:=cena1/(1001-arr[k,-1]);
getx:=cena1;
cena[k]:=cena1;
end;

begin
min:=10000000000000;
readln(n,m);
cena[0]:=1;
poseten[0]:=1;
for i:=1 to n do arr[i,-1]:=1001;
for i:=1 to m do begin
                 readln(a,b);
                 inc(arr[a,0]);
                 arr[a,arr[a,0]]:=b;
                 dec(arr[b,-1]);
                 arr[b,arr[b,-1]]:=a;
                 distrib[a]:=1;
                 end;
for i:=1 to n do if distrib[i]=0 then begin
                                      inc(prodava4[0]);
                                      prodava4[prodava4[0]]:=i;
                                      end;
for i:=1 to prodava4[0] do begin
                           moment:=getx(prodava4[i]);
              //             writeln(moment:0:6,' ',prodava4[i]);
                           if moment<min then min:=moment;
                           end;
//for i:=0 to n do writeln(i,' ',cena[i]:0:6,' ');
writeln(min:0:6);
{queue[1].num:=0;
queue[1].checked:=1;
read1:=1;
write1:=1;
repeat
for i:=1 to arr[queue[read1].num,0] do if arr3[arr[queue[read1].num,i]]=0 then
                                       begin
                                       inc(write1);
                                       queue[write1].num:=arr[queue[read1].num,i];
                                       arr3[arr[queue[read1].num,i]]:=1;

                                       end;
inc(read1);
until read1=write1;
for i:=1 to n+1 do write(queue[i].num,' ');}
end.