/*
TASK:trade
LANG:C++
*/
#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> s[1001],p[1001];
float price[1001],sol[1001];
int m,n,a,b;
float mini=999999;
float getPrice(int v)
{
	if(v==0) return 1;
	float sum=0;

	int psize=p[v].size(),ssize=s[v].size();

	for(int i=0;i<psize;i++)
	{
		if(price[p[v][i]]==0)
			price[p[v][i]]=getPrice(p[v][i]);
		sum+=price[p[v][i]];
	}
	sum/=psize;
	if(ssize!=0)
	{
		sum+=float(1)/float(ssize);
	}
	return sum;
}
int main()
{

	int i,cnt=0;
	scanf("%d %d",&n,&m);
	for(i=1;i<=m;i++)
	{
		scanf("%d %d",&a,&b);
		s[a].push_back(b);
		p[b].push_back(a);
	}

	for(i=1;i<=n;i++)
		if(s[i].size()==0)
		{
			float z=getPrice(i);
			if(z<mini) mini=z;
		}
	printf("%6f\n",mini);
	return 0;
}